【笔记】字符编解码乱码
前言
字符编解码乱码
锟斤拷
- 使用Unicode解码字符时,如果解码超出范围[0x0000,0x10FFFF],则Unicode会将其定义为
U+FFFD(�),内存中的值为0xEFBFBD - 使用GBK解码字符时,会将其识别为
锟(0xEFBF)斤(0xBFEF)拷(0xBFBD)
EF BF:锟BD EF:斤BF BD:拷
1 | EF BF BD EF BF BD EF BF |
- 使用GBK解码字符时,如果解码的最后一个字符是单字节,则GBK会将其定义为
0x3F- 例如:使用Unicode编码的
你(0xE4BD0A),使用GBK解码的时候会被定义为0xE4BD3F
- 例如:使用Unicode编码的
烫/屯
- 使用VisualStudio的debug模式运行程序时,VisualStudio会将栈内存初始化为
0xCC - 使用GBK解码字符,会将其识别为
烫(0xCCCC)
CC CC:烫
1 | CC CC CC CC CC CC CC CC |
- 使用VisualStudio的debug模式运行程序时,VisualStudio会将堆内存初始化为
0xCD - 使用GBK解码字符,会将其识别为
屯(0xCDCD)
CD CD:屯
1 | CD CD CD CD CD CD CD CD |
淇℃伅
- 使用Tomcat启动JavaWeb项目时,控制台会输出Unicode编码的
信(0xE4BFA1)息(0xE681AF) - 使用GBK解码字符,会将其识别为
淇(0xE4BF)℃(0xA1E6)伅(0x81AF)
E4 BF:淇A1 E6:℃81 AF:伅
1 | E4 BF A1 E6 81 AF |