python3 内存中使用的字符串全部是 unicode 码,但是网络传输的数据或者从磁盘读取的数据是把 unicode 码转换过的数据,通常情况下可能是 utf-8 格式的数据,所以如果从网络中读取或者磁盘中读取其实就是把 utf-8 格式的数据解码成 unicode 码数据,相反如果想把内存中 unicode 码数据存储到磁盘或者网络中需要对 unicode 码进行编码,通常可以采用 utf-8 的形式进行编码
在python3中执行
>>> sys.getdefaultencoding() #python3
'utf-8'
>>> sys.getdefaultencoding() #python2
'ascii'
- 二进制 -> 转换 -> 字符串 需要解码 decode
- 字符串 -> 转换 -> 二进制 需要编码 encode
ord与chr
python3中使用chr()将Unicode对应的字符打印出来. python3默认使用Unicode码 python3默认使用utf-8码
但是在python2中 chr(0~255)中的对应范围只是ASCII码的范围(0~255).
>>> for i in range(19968,40869): ##将所指定的汉字打印出来
... print(chr(i),end='')
...
一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿什仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟仠仡仢代令以仦仧仨仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹仺任仼份仾仿伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜伝伞伟传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸伹伺伻似伽伾伿佀佁佂佃佄佅但佇佈佉佊佋佌位低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟你佡佢佣佤佥佦佧佨佩佪佫佬佭佮佯佰佱
>>> chr(0x4E00) ##使用16进制 前面加 0x
'一'
>>>
>>> chr(19968)
'一'
>>> ord('一') ##反编译
19968
在golang中,使用fmt.Println(string(19968)) 可以直接将汉字打印出来
python 字符串转换成字节三种方式
str='cheng_cheng'
第一种 b'cheng_cheng'
第二种bytes('cheng_cheng',encoding='utf-8')
第三种('cheng_cheng').encode('utf-8')
对于汉字来说, utf-8编码每个汉字占3个字节, Unicode编码每个汉字占6个字节, 对于英文字符来说,utf-8编码和 Unicode编码占的字节数都一样
>>> bytes('一',encoding='unicode_escape') ##转成Unicode码
b'\\u4e00'
>>>
>>> '一'.encode('unicode_escape') ##转成Unicode码
b'\\u4e00'
++++++++++++++++++++++++++查看汉字Unicode码占字节大小+++++++++++++++++++++++++++++++++++
>>> len(bytes('一',encoding='unicode_escape')) ##查看占的字节大小
6
>>> len(bytes(u'一二',encoding='unicode_escape')) ##查看占的字节大小
12
++++++++++++++++++++++++++查看汉字utf-8码占字节大小+++++++++++++++++++++++++++++++++++
>>> ('一').encode('utf-8') ##转成utf-8码
b'\xe4\xb8\x80'
>>> len(('一').encode('utf-8')) ##查看占的字节大小
3
>>> len(('一二').encode('utf-8')) ##查看占的字节大小
6
++++++++++++++++++++++++++查看英文utf-8码和Unicode码占字节大小++++++++++++++++++++++++++++++
>>> len(('a').encode('utf-8'))
1
>>> len(('ab').encode('utf-8'))
2
>>>
>>> len(('a').encode('unicode_escape'))
1
>>> len(('ab').encode('unicode_escape'))
2
汉字 Unicode 编码范围
字符集 字数 Unicode 编码 基本汉字 20902字 4E00-9FA5 基本汉字补充 74字 9FA6-9FEF 扩展A 6582字 3400-4DB5 扩展B 42711字 20000-2A6D6 扩展C 4149字 2A700-2B734 扩展D 222字 2B740-2B81D 扩展E 5762字 2B820-2CEA1 扩展F 7473字 2CEB0-2EBE0 康熙部首 214字 2F00-2FD5 部首扩展 115字 2E80-2EF3 兼容汉字 477字 F900-FAD9 兼容扩展 542字 2F800-2FA1D PUA(GBK)部件 81字 E815-E86F 部件扩展 452字 E400-E5E8 PUA增补 207字 E600-E6CF 汉字笔画 36字 31C0-31E3 汉字结构 12字 2FF0-2FFB 汉语注音 43字 3105-312F 注音扩展 22字 31A0-31BA 〇 1字 3007 Unicode 是全球文字统一编码。它把世界上的各种文字的每一个字符指定唯一编码,实现跨语种、跨平台的应用。
中文用户最常接触的是汉字 Unicode 编码。中文字符数量巨大,日常使用的汉字数量有数千个,再加上生僻字,数量达到数万个。这个表格将中文字符集的 Unicode 编码范围列出,点击字库条目可见具体字符。若要查询具体字符的编码请前往:汉字字符集编码查询。