esp32使用查表法utf8转gbk

article/2025/6/17 4:42:51

查表法utf8转gbk

  • 前言
  • 制作bin文件
  • 添加代码

前言

由于要使用esp32获取天气信息,从服务器返回的json文件编码格式为utf8格式,而我制作的字库为gb2312字库,中文会出现乱码。在网上找了很久,最简单的方法是查表法,由于utf8和gbk编码无法直接转换,使用表进行查找,此方法需要单片机有足够的存储空间,代码参考链接: link.

制作bin文件

使用正点原子的c2b转换工具,将表转换为bin文件, 表格代码在前言的链接代码中。
在这里插入图片描述

添加代码

int SwitchToGbk(const unsigned char* pszBufIn, int nBufInLen, unsigned char* pszBufOut, int* pnBufOutLen)
{int i = 0;int j = 0;unsigned short unicode;char gbk[50];char file[30];strcpy(file, "/spiffs/c2b.bin");FILE* fp = fopen(file, "rb");if (fp == NULL) {ESP_LOGW(__FUNCTION__, "File not found [%s]", file);return -1;}for(; i < nBufInLen; i++, j++){if((pszBufIn[i] & 0x80) == 0x00)		// 1?{pszBufOut[j]= pszBufIn[i];}else if ((pszBufIn[i] & 0xF0) == 0xE0) // 3? {if (i+ 2 >= nBufInLen) return -1; unicode = (((int)(pszBufIn[i] & 0x0F)) << 12) | (((int)(pszBufIn[i+1] & 0x3F)) << 6) | (pszBufIn[i+2]  & 0x3F); fseek(fp, 2*(unicode-0x4e00), SEEK_SET );fread(gbk, 1,2, fp);	//这里是打开表文件寻找相应位置 // SPI_Flash_Read(gbk,utf8_info.utf8togbkddr+(2*(unicode-0x4e00)),2);pszBufOut[j]= gbk[1];//gbk%256;pszBufOut[j+1] = gbk[0];//gbk/256;.j++;i+=2;}else{ESP_LOGI("U2C", "不知原因");return -1;}}*pnBufOutLen = j;fclose(fp);return 0;
}

http://chatgpt.dhexx.cn/article/GM8Pe638.shtml

相关文章

UTF-8和GBK互转问题

文章目录 前言一、UTF-8、GBK、GB2312、Unicode二、转换原理1.背景2.UTF-8编码规则 总结 前言 遇到UTF-8和GBK互转问题&#xff0c;稍微记录一下重点~ 一、UTF-8、GBK、GB2312、Unicode GBK&#xff1a;《汉字内码扩展规范》。简体繁体均支持。 GB2312&#xff1a;《信息交换…

Linux操作系统:vim编辑器常用命令

文章目录 前言vim的基本概念vim的基本操作vim正常模式命令集&#xff08;1&#xff09;复制与粘贴&#xff08;2&#xff09;删除&#xff08;3&#xff09;光标移动和定位&#xff08;4&#xff09;撤销与反撤销 vim底行模式命令集&#xff08;1&#xff09;查找&#xff08;2…

7.0、Linux-Vim编辑器以及常用命令详解

7.0、Linux-Vim编辑器以及常用命令详解 什么是 Vim 编辑器 -> Vim 是从 vi 发展出来的一个文本编辑器&#xff1b;代码补全、编译以及错误等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用&#xff1b;简单的来说&#xff0c;vi 是老式的字处理器&#xff0c;不过…

Linux之vi和vim编辑器常用命令

一、一般模式 以vi打开一个档案就直接进入一般模式了&#xff08;这是默认的模式&#xff09;。在这个模式中&#xff0c; 你可以使用『上下左右』按键来移动光标&#xff0c;你可以使用『删除字符』或『删除整行』来处理档案内容&#xff0c; 也可以使用『复制、贴上』来处理…

Linux中vi/vim编辑器的常用命令

文章目录 前言vi文本编辑器三种模式命令模式(Command mode)移动光标命令查询命令切换到INTERT切换到VISUAL 输入模式(Insert mode)末行模式(Last line mode) cat 文件名 ——查看文件 vi 文件名 ——编辑文件 vim 文件名 ——编辑文件前言 不掌握vi/vim命令&#xff0c;都不…

Linux中vim编辑器常用命令、文件查找、磁盘挂载、用户管理

Vim 介绍 Vim 是全屏幕纯文本编辑器&#xff0c;是vi编辑器的升级版。 vim 不仅仅兼容vi所有的命令&#xff0c;而且高亮显示&#xff0c;vi只能运行在 UNIX 和 Linux 中&#xff0c;而 vim 可以跨平台运行在Windows&#xff0c;MAC OS 中。 vim 号称 “编辑器之神”&#x…

LINUX-VIM编辑器常用命令大全(超全)

工作模式切换&#xff1a; 按TAB键命令自动补全&#xff01;&#xff01;&#xff01; 一、编辑模式和一般模式常用命令 语法命令功能描述yy复制光标当前一行y 数字 y复制一段&#xff08;从第几行到第几行&#xff09;p箭头移动到目的行粘贴u撤销上一步dd删除光标当前行d 数字…

vim编辑器常用命令 (Centos)

1 安装vim编辑器 sudo yum update sudo yum install vim2 设置vim 显示行号 (:set nu) 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步骤2&#xff1a;输入 :set number 或者 :set nu 步骤3&#xff1a;按回车 3 查找 / 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步…

Linux虚拟机中vim编辑器常用命令介绍(二)

1.撤销和恢复撤销&#xff1a; u&#xff08;undo&#xff09;:撤销上次命令 Ctrlr&#xff08;redo&#xff09;:恢复撤销的命令&#xff08;重做&#xff09; 2.删除文本 x&#xff08;cut&#xff09;:删除光标所在字符&#xff0c;或者选中文字&#xff08;5x,删除光标…

Linux虚拟机中vim编辑器常用命令介绍(一)

1.行数移动&#xff1a; 命令 英文 功能 gg go 文件顶部 G go 文件末尾 数字gg go 移动到数字对应行数 数字G go 移动到数字对应行数 &#xff1a;数字 移动到数字对…

10 分钟上手 Vim 编辑器,常用命令大盘点!

点击蓝字 关注我们 #扫码加入专属群# 有诸多福利等你来拿~ 传闻有 240 万的程序员不知道如何退出 Vim 编辑器&#xff0c;真的有这么困难吗&#xff1f;下面给大家整理了一份 Vim 常用命令&#xff0c;让你 10 分钟快速上手 Vim&#xff0c;溜得飞起&#xff01; 以下命令请在普…

vim编辑器常用命令介绍

本文是对vim各种命令的使用介绍&#xff0c;旨在让大家快速学习掌握 什么是vim vim是Linux环境下一款功能强大、高度可定制的文本编辑工具 vim的工作模式 一般分为6种 普通模式用vim打开一个文件时默认模式&#xff0c;也叫命令模式&#xff0c;允许用户通过各种命令浏览代…

正态总体均值假设检验

单个正态总体均值的检验 (1)sigma已知的u检验&#xff08;Z检验&#xff09; #######Z检验 Z检验条件 1.样本量大于30 2.数据之间彼此独立 3.数据正常分布 4.样本量应该相等#单正态总体&#xff0c;方差已知 from scipy import stats from statsmodels.stats import weights…

数学建模之正态分布均值的假设检验

正态分布均值的假设检验 一&#xff0c;假设检验步骤 步骤一&#xff1a;写出原假设和备择假设 步骤二&#xff1a;在原假设成立的条件下&#xff0c;构造一个统计量&#xff0c;该统计量服从某一分布 步骤三&#xff1a;用已知的样本数据带入统计量的公式&#xff0c;得到…

数理统计-假设检验

假设检验 假设检验:根据样本的信息来判断总体是否具有指定的特征。 假设检验可以分为:参数假设检验和非参数假设检验。 1)参数假设检验问题,对总体X的分布函数中的未知参数a,设a的真值为a0,如何通过样本信息检验这个假设? 参数假设检验一般有:单个正太总体参数的假设…

线性回归中的假设检验

线性回归中的假设检验及Python编程 0 引言1 一元线性回归模型2 对于回归方程的检验F检验T检验 一元线性回归的Python编程实现与 statsmodels 包的对比关于多元线性回归 0 引言 本文介绍一元线性回归的基本假设&#xff0c;推导方法和统计检验&#xff0c;然后介绍Python编程实…

概率论:假设检验

http://blog.csdn.net/pipisorry/article/details/51182843 假设检验 假设检验问题分为两类,一类是参数的假设检验,一类是分布的假设检验! 设总体X的分布未知,或 X的某个分布参数 theta未知,对总体分布或分布参数 theta 提出一个假设 "H0" ,然后根据样本所提供的信息…

假设检验之几种检验方法的比较

之前学习概率论与数理统计的时候就不扎实&#xff0c;导致后来面试官在问我什么时候该用什么检验的时候稀里糊涂&#xff0c;最近工作中又遇到了假设检验的问题&#xff0c;所以就想把假设检验这块好好总结一下。 一.什么是假设检验&#xff1f; 假设检验是用来判断样本与样本…

相关系数及假设检验

一.假设检验 1.假设检验步骤 &#xff08;1&#xff09;提出假设&#xff1a;原假设和备择假设 &#xff08;2&#xff09;在原假设成立的条件下&#xff0c;构造一个检验统计量&#xff0c;该统计量有一个分布 &#xff08;3&#xff09;在给定置信水平下&#xff0c;求出…

假设检验流程

假设检验相关知识 原假设 原假也称为零假设&#xff0c;一般用H0表示。原假设一般是统计者想要拒绝的假设。 备选假设 备选假设用H1表示。备则假设是统计者想要接受的假设&#xff0c;而且备选假设和原假设一般为互斥假设。 例子&#xff1a;H0&#xff1a; H1&#xff1a; 显著…