PythonUnicode taochunhuatencent outline Unicode Pythonstrunicode Json Unicode Ascii

  • Slides: 17
Download presentation
谈谈Python编码问题和Unicode taochunhua@tencent

谈谈Python编码问题和Unicode taochunhua@tencent

outline • • Unicode基础知识 Python的str和unicode Json编码 具 实例

outline • • Unicode基础知识 Python的str和unicode Json编码 具 实例

Unicode • Ascii时代 – 7位,最高位是校验位 • MBCS时代(多字节字符集) – 中文CP 963,GBK,GB 2312,BIG 5 • Unicode

Unicode • Ascii时代 – 7位,最高位是校验位 • MBCS时代(多字节字符集) – 中文CP 963,GBK,GB 2312,BIG 5 • Unicode – Unicode 16,Unicode 32

题外话:存在与表示 • Big Endian & Little Endian – SPARK, x 86, ARM • Host

题外话:存在与表示 • Big Endian & Little Endian – SPARK, x 86, ARM • Host Byte Order & Network Byte Order – htonl, ntohl, htons, ntohs • Object Persistence & Serialize – MFC, java serialiable interface and persistence api, protobuf • Unicode & UTF, UCS – Several mechanisms have been specified for implementing Unicode.

unicode & utf • unicode – unicode 16, unicode 32 – • Unicode Transformation

unicode & utf • unicode – unicode 16, unicode 32 – • Unicode Transformation Format (UTF) – UTF 16(Big/Little Endian) – UTF 32(Big/Little Endian) – UTF 8 • 变长方案 • 思考?为什么是变长的?如何实现?

str与unicode的转化

str与unicode的转化

demo • 体验demo. py

demo • 体验demo. py

 • json. dumps(obj, ensure_ascii, encoding. . . ) – obj python数据结构: dic, list.

• json. dumps(obj, ensure_ascii, encoding. . . ) – obj python数据结构: dic, list. . . – ensure_ascii = True(default) • dumps返回一个str – ensure_ascii = False • dumps返回一个unicode!我们可以进一步对它 encode – encoding • 在obj进行转化之前,所有obj中的str会转为unicode, 即str. decode(encoding) – 默认情况: • str -> unicode -> json(unicode) -> str

一个默认处理 • json. dumps(d, encoding='gbk') – 它返回一个str • str -> unicode -> json(unicode) ->

一个默认处理 • json. dumps(d, encoding='gbk') – 它返回一个str • str -> unicode -> json(unicode) -> str – str->unicode的decode在 encoding参数控制 – json(unicode) -> str 这里的encoding是默认控 制的! – 这个默认控制不是encode,而是直接把 unicode转义为ascii编码,这个ascii码的内容是 unicode! – 这里应该是个utf 8,这个过程是个硬编码: 见lib 中encode. py

证据 • 老白干酒 – utf 8 : 0 x 8001 0 x 767 D

证据 • 老白干酒 – utf 8 : 0 x 8001 0 x 767 D 0 x 5 E 72 0 x 9152 – gbk : 0 x. C 0 CF 0 x. B 0 D 7 0 x. B 8 C 9 0 x. BEC 6