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

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

一.基础概念

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.dtcms.com/a/275894.html

相关文章:

  • Java开发八股文之基础篇
  • qt 正则表达式
  • [面试] 手写题-二分查找
  • linux学习第30天(线程同步和锁)
  • WordPress Ads Pro Plugin本地文件包含漏洞(CVE-2025-4380)
  • 计算机毕业设计springboot服装工厂移动报表软件设计 基于SpringBoot的服装企业移动端数据可视化系统 面向服装制造行业的移动报表与公告发布平台
  • 微服务环境下的灰度发布与金丝雀发布实战经验分享
  • 多路选择器的学习
  • 《Java Web程序设计》实验报告六 JSP+JDBC+MySQL实现登录注册
  • 【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新
  • 20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记
  • Go语言中的Options模式
  • 【Go + Gin 实现「双 Token」管理员登录】
  • Linux驱动08 --- 数据库
  • MCU芯片的功能安全机制E2E的基本原理和应用实现
  • 解锁C++数据结构:开启高效编程之旅
  • IDEA+Eclipse+Lombok无效问题排查
  • Java 之字符串 --- String 类
  • 电脑上如何查看WiFi密码
  • 什么是Jaccard 相似度(Jaccard Similarity)
  • 蓝牙调试抓包工具--nRF Connect移动端 使用详细总结
  • 日志不再孤立!用 Jaeger + TraceId 实现链路级定位
  • 程序在计算机中如何运行?——写给编程初学者的指南
  • 12.使用VGG网络进行Fashion-Mnist分类
  • Jenkins+Gitee+Docker容器化部署
  • 三步定位 Git Push 403:从日志到解决
  • 【深度剖析】致力“四个最”的君乐宝数字化转型(下篇:转型成效5-打造数字化生存能力探索可持续发展路径)
  • 【Datawhale AI夏令营】mcp-server
  • LeetCode 每日一题 2025/7/7-2025/7/13
  • 1. 好的设计原则