关注+星标公众号,不错过精彩内容!
我们在编程过程中总是会遇到乱码问题,如下图所示,中文全部全部乱码,英文则正常显示,此编译器为Keil5。这是由于文件编码格式与编译器设定格式不一致导致的。我们在编写代码时一定要统一编码格式,否则同一个工程中出现多种编码格式,有的文件乱码,有的文件正常,难以阅读。
可以在Keil5编译器下这样修改编码格式。
下面具体说一下什么是字符编码。
1、什么是字符编码,为什么要编码
对于单片机或者电脑来说,他们并不认识什么符号、字母、汉字等等,他们只认识二级制数,所以必须把这些字符进行二级制编码,才能用于传输与存储,当需要显示时,把这些二级制数翻译成相应字符即可。
2、ASCII编码
ASCII编码每个字符使用一个字节,标准的ASCII码最高位是0,因此只能表示128个字符,包括英文大小写字母以及常用符号等。有些国家根据自己需求扩展了ASCII,把预留的最高位也用上,这样就能表示256个字符。ASCII只能表示一些简单的字符字母,不能表示中文、日文等复杂字符。
3、GB2312编码
GB2312编码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆,新加坡等地也使用此编码,兼容ASCII。GB2312编码收录汉字、字母、日文共7445个字符,其中汉字占6763个。GB2312对每一种字符采用两个字节表示。
4、GBK编码
GBK编码实际上是对GB2312的扩展,也使用两个字节编码方式,完全兼容GB2312和ASCII。共收入两万多个汉字和图形符号。
5、GB18030编码
GB18030编码共收录七万多个汉字和符号,它是在GBK的基础上增加了中日韩语中的汉字和少数民族的文字和符号,完全兼容GB2312,基本兼容 GBK。GB18030标准采用单字节、双字节和四字节三种方式对字符编码。
6、UTF-8编码
先来说一下unicode,unicode是国际标准字符集,它收录了世界各个国家的字符,为每种字符制定了唯一代码,以满足跨语言的文本信息交换。再来说两个概念,字符代码和字符编码。字符代码是指某个字符在某个字符集中的序号。而字符编码是字符在传输与存储过程中使用的二进制数。在ASCII、GB2312、GBK、GB18030中字符代码和字符编码是相同的。但是unicode不同,它为每种字符制定了唯一代码,但是没有规定传输存储方式,也就是没有字符编码,所以就有了UTF-8、UTF-16等,UTF-8全称Unicode Transformation Format,是Unicode一种编码实现方式。UTF-8的特点是对不同的字符使用不同长度的编码,有单字节、双字节、三字节、四字节模式。
7、ANSI
在windows系统中存在ANSI这种“编码”,好多人奇怪这个ANSI到底是什么编码,实际上在中文简体操作系统中它就是GB2312,它是跟随系统语言走的,不同语言的windows编码格式不一样。ANSI仅仅是个代号。
如下:当我们另存为一个文档时出现以下下拉菜单。
8、总结一下他们的关系
ASCII被其它几种编码兼容,也就解释了文章开头英文字符没有乱码的原因。
扫码关注公众账号:硬件工程师技术干货