前言

网上一大堆都是要多种格式相互转换,并且要很大的字库文件,对于小应用工程,小容量的STM32芯片,额外多出这些开销会感到蛮不舒服的,而且绝大部分的乱码问题时发生在STM32这边,所以本文是从Android端解决编码格式转化的问题,STM32那边稍做处理即可,我做的转换是从UTF-8转到GBK

解决方案

先是在芸芸众文中发现一篇介绍JAVA正确做字符串编码转换的文章,确实可以在Android端实现转换,但是在Socket通信时还是按utf8的编码格式发,到STM32端还是乱码,所以编码转换毫无意义了。后来很巧的看到另一种方式的编码转换格式URLEncoder,然后就是使用了。

URLEncoder.encode(str,"GBK");

把中文转换出来的数据就是类似于"%B6%E0%CA%C7%C4%E3%BA%C3"的字符串,如果是ASCII码就是原样输出,百分号后面的两位字符就是对应的GBK汉字机内码了,所以只要在STM32端做一下数据格式处理就可以直接获取到GBK编码的汉字,而不用再做额外的映射表,字库之类的东西了。

下面是数据处理获取GBK编码的代码了

//把字符串格式的16进制数转换为整型16进制数
uchar hstr2Hex(uchar *hstr){
uchar a=0;
if(hstr[0]>=0x30 && hstr[0]<=0x39){
a=hstr[0]-0x30; }else if(hstr[0]>=0x41 && hstr[0]<=0x46){
a=hstr[0]-0x37;
}
a<<=4;
if(hstr[1]>=0x30 && hstr[1]<=0x39){
a+=hstr[1]-0x30; }else if(hstr[1]>=0x41 && hstr[1]<=0x46){
a+=hstr[1]-0x37;
} }
//调用这个函数做数据处理,对于非汉字数据不做处理
void getUrlGbk(uchar *nstr,uchar *ostr,int strlen){
int i,j;
uchar hstr[2];
for(i=0,j=0;i<strlen;i++){
if(ostr[i]=='%'){
hstr[0]=ostr[i+1];
hstr[1]=ostr[i+2];
nstr[j]=hstr2Hex(hstr);
j++;
i+=2;
}
else{
nstr[j]=ostr[i];
j++;
}
}
}

运行示图

测试程序:

输出为:

下面是在墨水屏上显示的从Android端发送来的数据

结语

在调试过程中一直以为是在Android端的编码没有转换成功,换了好多种方式,最后发现是发送的问题,真心累啊,希望以后少些这些历史遗留问题占用时间和精力吧。

Android与STM32通信中巧妙解决中文乱码问题的更多相关文章

  1. git status 显示中文和解决中文乱码

    目录 git status 显示中文和解决中文乱码 解决git status不能显示中文 解决git bash 终端显示中文乱码 通过修改配置文件来解决中文乱码 git status 显示中文和解决中 ...

  2. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...

  3. 在PHP中PDO解决中文乱码问题的一些补充

    我的环境是appsver包, 在网上最常出现的解决中文乱码显示的代码是: 第一种:PDO::__construct($dsn, $user, $pass, array (PDO::MYSQL_ATTR ...

  4. Web(Jsp+ Servlet)开发中如何解决中文乱码问题

    1.中文乱码的成因 编码的字符集和解码的字符集不一致. 2.web开发过程中可能出现的乱码的位置及解决方案 ①request乱码 在向服务器传递数据时,所传递的中文有可能出现乱码. post请求(协议 ...

  5. Python3中如何解决中文乱码与编码的问题

    1.解决乱码问题: pyhton中内部所有编码是Unicode,中文是gbk:正常情况下,我们输出的是utf-8: 我们可以采用sys.getdefaultencoding()查看系统默认的编码: 解 ...

  6. Struts 2中如何解决中文乱码问题?

    在配置文件中定义如下常量值配置: <constant name=”struts.i18n.encoding” value=”UTF-8”/> 注意:只能解决post请求的乱码问题,针对ge ...

  7. 在PHP中PDO解决中文乱码问题

    $this->pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true)); $stmt = $th ...

  8. HttpServletRequest解决中文乱码的问题

    HTTP请求有get和post,这两中方式解决中文乱码的方式如下: 1.Post方式请求 //这句话是设置post请求体的编码为utf-8 request.setCharacterEncoding(& ...

  9. 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题

    当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...

  10. Android studio 配置file encoding 无效,中文乱码解决办法

    通过配置Android studio 配置file encoding 无效,中文乱码,问题出现在java编译的时候jack采用了默认编码(中文windows默认的GBK编码)而乱码,所以不管更改bui ...

随机推荐

  1. 【Azure 应用服务】Azure App Service能否使用Storage Account File Share

    问题描述 Azure App Service能否使用Storage Account File Share? 问题回答 如果部署的App Service为Linux环境,可以直接使用Mount stor ...

  2. Dockerfile编写(备份)

    1-使用#注释 2-Dockerfile 主体内容分为四部分:基础镜像信息. 维护者信息. 镜像操作指令和容器启动时执行指令 简单示例: FROM   xxx:latest   #基于xxx:late ...

  3. .NET 全能 Cron 表达式解析库(支持 Cron 所有特性)

    前言 今天大姚给大家分享一个.NET 全能 Cron 表达式解析类库,支持 Cron 所有特性:TimeCrontab. Cron表达式介绍 Cron表达式是一种用于配置定时任务的时间表达式.它由一系 ...

  4. .Net下的CORS跨域设置

    CORS跨域访问问题往往出现在"浏览器客户端"通过ajax调用"服务端API"的时候.而且若是深究原理,还会发现跨域问题其实还分为[简单跨域]与[复杂跨域]这两 ...

  5. Vue前端项目架构梳理

    撰写日期:2020-07-23 撰稿人:彭成刚 转载需经本人同意. Vue前端项目架构梳理 后期可以将TypeScript加入到项目来,对参数的数据类型进行更严格的校验. 现在主流就 Vue 和 Re ...

  6. http-server -S 开启 https 服务

    下载 openssl Win64 OpenSSL v1.1.1k Light http://slproweb.com/download/Win64OpenSSL_Light-1_1_1k.exe 一路 ...

  7. Rust 标准库 Trait 指南

    部分内容来自 Rust 2021 年期刊 内容目录 引言 Trait 基础 自动 Trait 泛型 Trait 格式化 Trait 操作符 Trait 转换 Trait 错误处理 迭代器 Trait ...

  8. 修改Tomcat服务器Server Locations

    首先双击我们集成好的Tomcat服务器  修改Server Locations选项  Specify the server path (i.e. catalina.base) and deploy p ...

  9. Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案

    公司的站点是跑在Tomcat环境下的,运行一段时间后,有时会报这样的错误:java.lang.OutOfMemoryError: PermGen space 在网上查询了一下,大部分都说是jvm虚拟机 ...

  10. 游戏引擎中的实时渲染和在V-Ray中渲染有什么区别 2022-11-25

    游戏引擎中的实时渲染和在V-Ray中渲染有什么区别,下面我们一起来分析一下,从2个方面来具体分析实时渲染和在V-Ray中渲染种的不一样的区别. 原理区别 VRay等渲染器原理上叫做离线渲染(Offli ...