当前位置: 首页 > ops >正文

嵌入式领域编码合集(为什么中文会乱码)

一.基础概念

1. 字符编码的本质是什么?

字符编码本质上是“字符”到“字节”之间的映射规则。

  • 计算机只能存储0和1(二进制),而“字母”“汉字”都是抽象的符号。

  • 所以需要一套规定,把每个字符(比如“A”或“你”)对应到唯一的一串二进制码,这就是“字符编码”。

总结:传输的数据无论以何种格式显示,传输的过程都是二进制,接收显示只依赖于接收放的显示格式

二.常见编码

  • ASCII:只支持英文、数字和常用符号,占1个字节(8位)。

  • GB2312/GBK/GB18030:主要用于简体中文,汉字2字节,兼容ASCII。

  • UTF-8:国际通用,英文1字节,中文3字节(常用汉字),兼容ASCII。

  • Unicode编码:为了解决不同国家ANSI编码的冲突问题,Unicode应运而生

详细介绍可以看:字符编码ANSI和ASCII区别、Unicode和UTF-8区别_ansi编码-CSDN博客

总结:从包含范围看,Unicode = UTF-8 >GB2312(ANSI)>ASCII,简单解释就是ASCII码被任何一种编码格式包含且编译形式完全相同,所有英文怎么输出都不会报错。

Q1:那么中文为什么会报错呢?

  • 你用中文(比如“你”)时,如果编码不同,它的字节序列就会变:

    • “你”在GB2312下=0xC4E3(2字节)

    • “你”在UTF-8下=0xE4BDA0(3字节)

  • 如果发送的是GB2312编码的数据,而接收方用UTF-8解码(或反之),字节序列解释出来就是乱码。

Q2:ANSI和GB2312什么关系?

  • ANSI并不特指某一种具体的编码。 Windows 系统设置和文本编辑器(如记事本)中提到的“ANSI”编码,实际上指的是系统的当前“Windows 代码页”或“活动代码页”

  • 这个“活动代码页”会根据你的Windows系统区域和语言设置而动态变化

    • 如果你的系统区域设置是简体中文(中国),那么“ANSI”编码对应的就是 GBK 编码(GB2312的超集/扩展)。

    • 如果你的系统区域设置是繁体中文(台湾),那么“ANSI”编码对应的就是 Big5 编码。

    • 如果你的系统区域设置是日语,那么“ANSI”编码对应的就是 Shift_JIS 编码。

    • 如果你的系统区域设置是西欧语言(如英语、法语、德语),那么“ANSI”编码对应的就是 Windows-1252 编码(它是 ISO-8859-1/Latin1 的超集)。

  • 关键点: “ANSI”在这里是一个占位符,代表当前系统默认的本地化单字节/双字节编码

Q3:为什么我修改了keil中的编译格式,改为GB2312还是乱码?

        因为keil(其他软件也是)中的设置只是设置是以什么格式来显示代码中的字符,真正的传输格式开始Q3提到的,由于在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件所有我们知道,不管软件是什么模式,文件保存就是UTF-8编码的格式。由于接收方不一定适配UTF-8格式(使用GB来解码),就会出现错误。

三.如何解决显示乱码问题

        根据Q3的问题,我们知道根源是来自发送和接收的格式不匹配问题,所有我们只要使用文本编辑器,来打开目标源文件,另存为编码格式选择未(ANSi),保存后,中文就不会在乱码了。

http://www.xdnf.cn/news/15236.html

相关文章:

  • (一)一阶数字低通滤波器---原理及其推导
  • web网站无法抓包排查;burp无法抓包情况
  • 实用技巧 Excel 与 XML互转
  • 鸿蒙进程通信的坑之ServiceExtensionAbility
  • 【大模型】深度学习之神经网络
  • Scrapy爬虫中间件核心技术解析:定制化爬虫的神经中枢
  • 9.2 埃尔米特矩阵和酉矩阵
  • 张量拼接操作
  • Git系列--4.Git分支设计规范
  • 深大计算机游戏开发 实验二
  • 8. JVM类装载的执行过程
  • 【读书笔记】《C++ Software Design》第二章:The Art of Building Abstractions
  • c++反射实现
  • Python ExcelWriter详解:从基础到高级的完整指南
  • 网络安全初级--搭建
  • python的婚纱影楼管理系统
  • Redis Geospatial 功能详解及多边形包含判断实现
  • SpringAI实现聊天记录保存到MySQL
  • 「日拱一码」025 机器学习——评价指标
  • Spring 框架中的设计模式:从实现到思想的深度解析
  • C++类模板继承部分知识及测试代码
  • 在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段
  • Linux之Zabbix分布式监控篇(一)
  • 云原生技术与应用-生产环境构建高可用Harbor私有镜像仓库
  • 网络通信模型对比:OSI与TCP/IP参考模型解析
  • BGP 路由优选属性(7)【MED】官方考试综合实验题【bgp】【acl】【ip-prefix】【route-policy】【icmp 环路】精讲
  • Frida绕过SSL Pinning (证书绑定)抓包;Frida注入;app无法抓包问题解决。
  • 哔哩哔哩第三方TV-BBLL最新版
  • Pyqt5 FlexRay
  • Redis事件机制