esp32使用查表法utf8转gbk
查表法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;
}
esp32使用查表法utf8转gbk相关推荐
- python查表法是什么_python查表法提取骨骼线经历
首先根据这篇博文https://www.cnblogs.com/xianglan/archive/2011/01/01/1923779.html,自己重新编写python代码,由于出现局部错误,导致出 ...
- CRC查表法——表的由来及Java实现CRC8校验算法
转载请标明出处: http://blog.csdn.net/xx326664162/article/details/51718857 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定 ...
- 单片机c语言NTC温度查表程序,STM32查表法读NTC值并显示温度
STM32查表法读NTC值并显示温度 #include "stm32f10x.h"Y'+F0IZ+ #include "delay.h"pU'`9fLi_ #i ...
- crc16modbus查表法_查表法计算CRC16校验值
/******************************************************************************* * Copyright (c) 201 ...
- FPGA之道(63)“万能”的查表法
文章目录 前言 "万能"的查表法 正弦波发生器示例 前言 又好几天没更新了,这就是又停止了读书的节奏,终于在毕业论文可以稍微舒缓下来的时候更新了博客,完成一个系列,读完一本书等等都 ...
- 嵌入式C语言查表法的项目应用
嵌入式C实战项目开发技巧:如何对一个有规律的数组表进行位移操作 就像下面的这个表 之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑 ...
- VTK修炼之道23:图像基本操作_灰度图像映射成伪彩色图像(查表法)
1.查表法伪彩图映射 图像彩色映射的原理是首先生成一个颜色查找表,然后根据图像的一个标量值向颜色查找表中查找对应的颜色,并用新颜色值替代原来的像素值.VTK中vtkImageMapToColors负责 ...
- 数组---进制转换(查表法)
package com.shuzu; public class shuzuJinZhiZhuanHuan { * @param a 所要转换的十进制数,b 不同进制所要与(&)的数不同,wei ...
- 查表法实现反正切_关于python实现CRC32的应用和总结
关于python实现CRC32的应用和总结 目前使用的Crc计算包含Crc32和Crc32mpeg2两种计算方式. 循环冗余检验 CRC 差错检测技术能够证明数据是完整的,是无差错的(只是非常近似的认 ...
最新文章
- leetcode139 单词拆分
- 闲鱼如何建设技术舆情治理体系 (多图多代码)
- python爬取哔哩哔哩视频_Python实现视频爬取下载
- 太香了!4999元就能入手iPhone 11 最高降价达900元
- Android 关机(reboot)流程 -- sys.powerctl
- 2021 年全国大学生电子设计竞赛实施过程说明
- linux 键盘映射修改
- 2020叉车司机考试及叉车司机模拟考试题库
- 如何在VeryCD中下载资源
- 海思3559万能平台:VGS的画线处理
- Ansible inventory文件详解
- Windows7 开机自启脚本
- 把EXCEL拆分成两个窗口的办法
- Word-embedding的资料整理
- python键盘键值表_Python怎么记录键盘鼠标敲击次数|Python统计鼠标点击次数 - PS下...
- 狂乱的潇洒主义者,频繁的追求自由者!
- python实现-用随机森林填补缺失值、均值填充0填充的比较
- python Linux学习之 ansible-- ansible test -m ping运行错误
- elementUI之省市区三级联动
- 用Visual Studio开发安卓应用