背景
页面需求,将一个含中文文案的js上传到amis,出现乱码:
字符编码种类
常见编码及其规则
如图,箭头方向为字符集扩充方向,箭头末端对始端兼容。
编码长度及范围
编码 | 长度 | 表示范围 |
---|---|---|
ASCII | 8bit | 英文字母+符号 |
ISO-8859-1 | 1B(16bit) | ASCII+欧洲语言 |
BIG | 2B | ASCII+繁体汉字(台湾) |
GB2312 | 2B | ASCII+简体汉字 |
GBK | 2B | BIG+GB2312+日韩汉字 |
GB18030 | 4B | GBK+日语、韩语、少数民族文字 |
Unicode(UTF-8/12/16) | 1-4B | ASCII+全球文字 |
UTF8
UTF8用1-4B(8-32bit)表示字符,开始连续为1的bit数量表示B的数量:
1B:0xxxxxxx (就是ASCII)
2B:110xxxxx xxxxxxxx
3B:1110xxxx xxxxxxxx xxxxxxxx
4B:1111xxxx xxxxxxxx xxxxxxxx xxxxxxxx
复制代码
虽然Unicode和GB系列都能表示汉字,但并不兼容,同一汉字两种编码是不一样的。
常见乱码样式原因
中文乱码多由编码方式和解码方式不一致导致,常见乱码如下:
乱码为复杂汉字
如,文件上传到amis后,“安徽省”变成“瀹夊窘鐪?” 【Utf编码】【GB解码】,一般在两套不同汉字编码方式的系统中 UTF-8用1-4B表示字符,“安徽省”三个字各用3B:e5ae89 e5bebd e79c81 GBK用2B表示字符,所以按e5ae 89e5 bebd e79c 81解析,得到:瀹夊窘鐪?
乱码为菱形问号
如,文件在VScode打开后:
菱形问号是Unicode字符"REPLACEMENT CHARACTER”,表示不能识别。 【GB编码】【Utf解码】 比如:“吃饭”,GBK编码:b3d4 b7b9 UTF8解码: 第一个B:b3—>10110011,不在UTF8编码内,� 第二个B:d4—>11010100,符合2B格式,解码d4b7,是个阿拉伯文:Է 第四个B:b9—>10111001,不在UTF8编码内,�
乱码为?
【ISO8859-1编码】【ISO8859-1解码】,一般在国外网站、软件中输入汉字产生 比如:“吃饭”,ISO8859-1编码,编码失败成:3f 3f 再解码:??
乱码为数学符号
【GB编码】【ISO8859-1解码】 比如:“你好”,GBK编码:4f60 597d ISO8859-1,1B,按4f 60 59 7d解码:ä½ å¥½
相关工具
在线编码、解码
vscode
默认跟随mac,utf-8,可以设置编码: