文本编码
- 文本编码这个问题自三年前就困扰着我,当时是用Python处理多国语言时出现的bug,最后问题解决了,但其中具体逻辑并不懂。后来零零散散接触了不少资料,算是大致弄明白,记录如下。
unicode与ascii等编码方案
ascii
- ascii编码方案一共规定了128个字符对应的二进制表示,只占用了一个字节的后面7bit,最高位为0
- 欧洲国家使用128个符号不足以表示所有字母,使用了最高位。因此不同的国家128~255表示不同的符号,并不通用,即为扩展的ascii码,包括ISO-8859-1~15。这些都是单个字节编码。
- ISO-8859-1
- ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中
- ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃
- Latin1是ISO-8859-1的别名,有些环境下写作Latin-1
gb2312
- 一种双字节编码,包含6763个汉字
gbk
- 对gb2312的扩展,可以表示21003个汉字,兼容gb2312
gb18030
- unicode的一种天朝实现
- 采用单、双、四字节编码,兼容gb2312
base64
- base64使用64个可打印字符表示二进制数据。每个单元包含6bit。转换后每76个单元要加上一个换行符。
- 可打印字符包括: