编码问题

常见的编码设定
- IDE/编辑器
截图为WebStorm编辑器下针对单个文件的编码设定

网页源码
截图为
Chrome下浏览网页源码

网络请求
截图为Chrome下查看XHR请求数据



网址链接

程序语言

编码的目的
计算机内部所有信息中最终都是二进制值即0和1,所以编码需要解决所有的字符符号的存取/显示

ASCII/Unicode/UTF-8
常常遇到的编码相关概念有这几个,但需要区分清楚
ASCII是基于拉丁字母的编码,只能表示128个字符,因此无法表示很多语言字符,比如中文- 128个字符包含了
a-zA-Z 52个字符,0-9 10个数字字符,+-等符号及一些不可见字符,比如ACK
- 128个字符包含了
Unicode是字符集,目的是对全世界所有符号进行编码,比如中/日/英文,Unicode规定了所有符号的二进制代码比如
中转Unicode是\u4e2d,比如ウ转Unicode是\u30a6,所以每个符号都可以有唯一的二进制进行对应。但注意,所有符号对应的二进制代码定长,如果真的按照这样进行存储会很浪费,比如越靠前的越浪费。因此Unicode虽好,但并不能按照这样真的进行存取- Unicode叫统一码,也叫万国码、单一码,是一种编码国际化方案
UTF-8/ASCII是编码,编码决定具体怎么存/传输,so,UTF-8 是 Unicode 的实现方式之一,比如中转UTF-8是中- UTF-8兼容ASCII
- 抽象来说,unicode只是一个interface,UTF-XX 是这个接口的实现
时间线
- ASCII第一版标准发布于
1963年 - Unicode第一版发布于
1991年 - UTF-8创建于
1992年
文件的编码方式存在哪?
Unicode 规范定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(zero width no-break space)
其它编码
base64编码
其特点是
所有的二进制文件,都可以转化为可打印的文本编码,使用文本软件进行编辑;
能够对文本进行简单的加密。
除了base64,还有个base58,相比base64,base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/“符号。即 64-6
URL编码

JS范畴提供了对应函数来处理URL编码,即encodeURI/encodeURIComponent
为什么会乱码
存储编码/显示编码的不一致性



例子中的ISO8859-1是以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用的升级版,但依然不能表示中文字符。
UTF-16并不向后兼容UTF-8
识别编码
https://github.com/aikuyun/iterm2-zmodem/blob/master/iterm2-recv-zmodem.sh




