字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8相关的知识,希望对你有一定的参考价值。
参考技术AASCII码是西欧编码的方式,采取7位编码,所以是2^7=128,共可以表示128个字符,包括34个字符,(如换行LF,回车CR等),其余94位为英文字母和标点符号及运算符号等。
重点:
注:NUL:‘\\0\'是一个ASCII码为0的字符,从ASCII码表中可以看到ASCII码为0的字符是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。
你看到的unicode字符集是这样的编码表:
计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:
这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。
怎么办?
UTF
UTF-8是这样做的:
这样就形成了如下的UTF-8标记位:
从上面的内容了解了字符编码以后,以后遇到相关的字符编码问题的时候至少有解决的思路,而不是一头雾水
开始问题分析:
1.字符集分析:gb2312支持数字和英文和6000+汉字
2.编码分析:英文占一个字节,中文占两个字节(这就是问题)
这时就要想到,中文汉子对照表:
3.特性:gb2312的高位字节如果大于127(ASCII),就为中文,只有gb2312具有这个特性
4.如果想兼容utf-8和unicode和gbk,那么可以4位16进制的字符截取,如果大于127,那么默认为中文,否则就是英文或字符或数字
这个函数是把数字或进制字符都转为10进制的数字,第二个参数radix表示的是第一个参数string的类型(10进制,2进制,8进制,16进制),我之前很白菜的理解为我想把第一个参数string转化成16进制。哎,我还是太年轻啊
字符编码
py 2.0 上默认ASCII 不支持中文所以出现了GB2312
uncode 是万国编码 包含各个国家的字符 utf-8 是uncode 的一个扩展集
GBK兼容GB2312
uncode 中文英文均为2字节 ASCII为一个字节 utf-8 英文1个字节中文3个字节
如果一个文件用GBK编码
另一个程序用utf-8编写
由于GBK与utf-8不能互译
需要将GBK 解码为uncode (decode)再编码(encode)utf-8
py3.0默认为uncode
声明编码
#-*- codin:utf-8 -*-
以上是关于字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8的主要内容,如果未能解决你的问题,请参考以下文章
关于gbk, gb2312,unicode,utf-8等字符编码的问题
彻底搞清楚字符编码: ASCII, ISO_8859, GB2312,UCS, Unicode, Utf-8