常用字符集编码详解
在计算机中,各种语言的字符需要通过字符编码来表示,常见的字符集编码包括ASCII、GB2312、GBK、GB18030、unicode、UTF-8。下面逐一介绍。
ASCII
ASCII(American Standard Code for Information Interchange)是最早的字符编码,将每个字符用7位十进制数表示。编码范围是0-127,其中控制字符(如换行、回车等)占用了前32个。例如,字符'A'的ASCII码是65。
GB2312
GB2312 是中国官方使用的汉字编码方式,采用2个字节(16位)表示每个汉字,编码范围是0xA1A1-0xFEFE,其中前一个字节位于0xA1-0xF7,后一个字节位于0xA1-0xFE。例如,“中文”两个字的GB2312码是0xD6D0B9FAC3C5。
GBK
GBK是GB2312的扩展版本,在不改变GB2312的基础上,重新定义了一些未使用的区域,并将汉字编码范围扩展至0x8140-0xFEFE,同时保持了与GB2312编码范围内字符的兼容性。例如,“中文”两个字的GBK码是0xB1A8D7D6。
GB18030
GB18030是中国发布的最新的汉字编码标准,兼容GB2312和GBK,但编码范围更广。其中汉字的编码使用1至4个字节表示,最大编码范围是0x01-0x10FFFF,包含了Unicode的全部字符。例如,“中文”两个字的GB18030码是0xCAC7D7D6。
Unicode
Unicode 是国际组织制定的字符编码标准,将每个字符用一个唯一的码位表示,编码范围是0-0x10FFFF,其中前128个码位与ASCII编码一致,后面的码位包含了各种语言的字符,包括汉字、拉丁字母、希腊字母、数学符号等。例如,“中文”两个字的Unicode码是0x4E2D4E00。
UTF-8
UTF-8是一种基于Unicode标准的变长字符编码方式,可以表示Unicode编码范围内的所有字符,具有很好的兼容性和可扩展性。UTF-8编码规则如下:
- 如果字符的码位在0-127之间,用一个字节表示,最高位为0;
- 如果字符的码位超过127,用多个字节表示,每个字节的最高位均为1,其余位用该字符码的二进制表示,除第一个字节外,其余字节最高位为0。
例如,“中文”两个字的UTF-8编码为0xE4B8ADE69687。
示例1
下面给出将字符串"hello"分别用ASCII和UTF-8编码的代码示例:
# ASCII编码
s = "hello"
res = []
for c in s:
res.append(str(ord(c)))
print(",".join(res))
# 输出结果:104,101,108,108,111
# UTF-8编码
s = "hello"
res = []
for c in s:
b = c.encode('utf-8')
res.append(' '.join([str(b[i]) for i in range(len(b))]))
print(",".join(res))
# 输出结果:104 101 108 108 111
示例2
下面给出将汉字"中文"分别用GBK和UTF-8编码的代码示例:
# GBK编码
s = "中文"
b = s.encode('gbk')
res = []
for i in range(len(b)):
if i%2 == 0:
res.append(str(b[i])+","+str(b[i+1]))
print(",".join(res))
# 输出结果:176,161,200,165
# UTF-8编码
s = "中文"
b = s.encode('utf-8')
res = []
for i in range(len(b)):
res.append(str(b[i]))
print(",".join(res))
# 输出结果:228,184,173,230,150,135
以上就是常用字符集编码的详细攻略,如有有疑问,欢迎留言讨论!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8) - Python技术站