- 本质上计算机只能识别01代码
- 如何用一长串01代码表示复杂的信息
- 二进制
- bit: 一个0或者1的二进制数字
- byte: 八个01代码,字节
- 第一阶段: ASCII
- 第二阶段:百花齐放, GB2312, GBK, BIG5, Latin1,JIS,
- Latin1:兼容欧洲大多数语言
- 中国:GBxxxx
- 韩国台湾: BIG5
- 日本: JIS
- ANSI-MBCS(Multi-bytes charecter set,多字节字符集)
- 第三个阶段: Unicode(ISO)
- 所有控制字符(包括回车,删除等 )编码再0-31范围以及127
- 所有标点符号,英文大小写放在32-126之间
- 预留128-255之间位置
- 0xxx xxxx 是它的编码形式
- 0-127的所有位置不动,那么可以兼容ASCII,二进制位0xxx xxxx
- 128-255位置全部用完,二进制位1xxx xxxx
- 128-159之间为控制字符,
- 160-255位文字符号,
- 其中包括了西欧语言、希腊语、泰语、阿拉伯语、希伯来语
- 欧元符号
- GB2312
- 如果一个字节中第一位为0,那么这就是一个ASCII字符。
-如果一个字节中第一位为1,那么这个是汉字,认定需要2个字节才表示一个编码的文字。
- 这个码表中包含汉字6763个和非汉字图形字符682个。
- 还有很多的空间没有用到,索性全部预留了吧。
- 0xxxxxxx:表示为ASCII字符
- 1xxxxxxx 1xxxxxxx:表示为汉字
- GBK
- 在GB2312基础上添加汉字
- 兼任GB2312和ASCII
- 0xxxxxxx:表示为ASCII字符
- 1xxxxxxx xxxxxxxx:表示为汉字
- GB18030
- 2/4位混编
0x0000~0x007F (0 ~ 127) 1字节 0xxxxxxx
0x0080~0x07FF(128 ~ 2047) 110xxxxx 10xxxxxx
0x0800~FFFF(2048 ~ 65535) 3字节 1110xxxx 10xxxxxx 10xxxxxx
0x10000~1FFFFFF(65536 ~ 2097152) 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x2000000~0x3FFFFFF 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x4000000~0x7FFFFFFF 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- UTF-16 早期 Uncode历史遗留问题
- UTF-32 浪费空间
- UCS=UniversalCharacterSet,通用字符集
- UCS-2与Unicode相同
- 采用2个字节,定长的表示每一个字符,所以总计可以表示2^16个字符
- 第一个字节:表示组(group),最高位为0,则有128个。
- 第二个字节:表示平面(plane),256个。
- 第三个字节:表示行(row),256个。
- 第四个字节:表示码位(cell),256个
- 如果UCS-4前两个字节为0, 则就是CUS-2
- '汉' -> 6C49
- 6C49 -> BigEndian
- 496C -> LittleEndian
- UTF-8没有字节顺序问题
- UTF-16会出现问题
- "奎" -> 594E
- "乙" -> 4E59
- BOM-ByteOrderMark
- "ZERO WIDTH NO-BREAK SPACE" -> FEFF, 在UCS中不存在
- FEFF->BigEndian
- FFFE->LittleEndian
- UTF-8 用来表示编码, FEFF的UTF-8编码是EF BB BF,
用来表示此后编码是UTF-8编码
>>> b = bytes.fromhex('E4 B8 AD')
>>> b
b'\xe4\xb8\xad'
>>> b.decode('utf-8')
'中'
>>> str(b)
" b'\\xe4\\xb8\\xa"
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(65)
'A'
>>> chr(20013)
'中'
- 放在第一行,或者第二行
- ```# ‐\*‐ coding: windows‐1252 ‐\*‐```
- 读写文件默认utf-8, 可以指定
- code point方式比较字符串,可能会带来问题
- 重音符号的表示
- 使用 unicodedata.normalize 函数
UnicodeDecodeError异常
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。