标准编码

Python 自带了许多内置的编解码器,它们的实现或者是通过 C 函数,或者是通过映射表。 以下表格是按名称排序的编解码器列表,并提供了一些常见别名以及编码格式通常针对的语言。 别名和语言列表都不是详尽无遗的。 请注意仅有大小写区别或使用连字符替代下划线的拼写形式也都是有效的别名;因此,'utf-8''utf_8' 编解码器的有效别名。

CPython implementation detail: 有些常见编码格式可以绕过编解码器查找机制来提升性能。 这些优化机会对于 CPython 来说仅能通过一组有限的别名(大小写不敏感)来识别:utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs (Windows 专属), ascii, us-ascii, utf-16, utf16, utf-32, utf32, 也包括使用下划线替代连字符的的形式。 使用这些编码格式的其他别名可能会导致更慢的执行速度。

在 3.6 版更改: 可识别针对 us-ascii 的优化机会。

许多字符集都支持相同的语言。 它们在个别字符(例如是否支持 EURO SIGN 等)以及给字符所分配的码位方面存在差异。 特别是对于欧洲语言来说,通常存在以下几种变体:

  • 某个 ISO 8859 编码集
  • 某个 Microsoft Windows 编码页,通常是派生自某个 8859 编码集,但会用附加的图形字符来替换控制字符。
  • 某个 IBM EBCDIC 编码页
  • 某个 IBM PC 编码页,通常会兼容 ASCII
编码 别名 语言
ascii 646, us-ascii 英语
big5 big5-tw, csbig5 繁体中文
big5hkscs big5-hkscs, hkscs 繁体中文
cp037 IBM037, IBM039 英语
cp273 273, IBM273, csIBM273 德语3.4 新版功能.
cp424 EBCDIC-CP-HE, IBM424 希伯来语
cp437 437, IBM437 英语
cp500 EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500 西欧
cp720 阿拉伯语
cp737 希腊语
cp775 IBM775 波罗的海语言
cp850 850, IBM850 西欧
cp852 852, IBM852 中欧和东欧
cp855 855, IBM855 保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
cp856 希伯来语
cp857 857, IBM857 土耳其语
cp858 858, IBM858 西欧
cp860 860, IBM860 葡萄牙语
cp861 861, CP-IS, IBM861 冰岛语
cp862 862, IBM862 希伯来语
cp863 863, IBM863 加拿大语
cp864 IBM864 阿拉伯语
cp865 865, IBM865 丹麦语/挪威语
cp866 866, IBM866 俄语
cp869 869, CP-GR, IBM869 希腊语
cp874 泰语
cp875 希腊语
cp932 932, ms932, mskanji, ms-kanji 日语
cp949 949, ms949, uhc 韩语
cp950 950, ms950 繁体中文
cp1006 乌尔都语
cp1026 ibm1026 土耳其语
cp1125 1125, ibm1125, cp866u, ruscii 乌克兰语3.4 新版功能.
cp1140 ibm1140 西欧
cp1250 windows-1250 中欧和东欧
cp1251 windows-1251 保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
cp1252 windows-1252 西欧
cp1253 windows-1253 希腊语
cp1254 windows-1254 土耳其语
cp1255 windows-1255 希伯来语
cp1256 windows-1256 阿拉伯语
cp1257 windows-1257 波罗的海语言
cp1258 windows-1258 越南语
euc_jp eucjp, ujis, u-jis 日语
euc_jis_2004 jisx0213, eucjis2004 日语
euc_jisx0213 eucjisx0213 日语
euc_kr euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001 韩语
gb2312 chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58 简体中文
gbk 936, cp936, ms936 统一汉语
gb18030 gb18030-2000 统一汉语
hz hzgb, hz-gb, hz-gb-2312 简体中文
iso2022_jp csiso2022jp, iso2022jp, iso-2022-jp 日语
iso2022_jp_1 iso2022jp-1, iso-2022-jp-1 日语
iso2022_jp_2 iso2022jp-2, iso-2022-jp-2 日语,韩语,简体中文,西欧,希腊语
iso2022_jp_2004 iso2022jp-2004, iso-2022-jp-2004 日语
iso2022_jp_3 iso2022jp-3, iso-2022-jp-3 日语
iso2022_jp_ext iso2022jp-ext, iso-2022-jp-ext 日语
iso2022_kr csiso2022kr, iso2022kr, iso-2022-kr 韩语
latin_1 iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1 西欧
iso8859_2 iso-8859-2, latin2, L2 中欧和东欧
iso8859_3 iso-8859-3, latin3, L3 世界语,马耳他语
iso8859_4 iso-8859-4, latin4, L4 波罗的海语言
iso8859_5 iso-8859-5, cyrillic 保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
iso8859_6 iso-8859-6, arabic 阿拉伯语
iso8859_7 iso-8859-7, greek, greek8 希腊语
iso8859_8 iso-8859-8, hebrew 希伯来语
iso8859_9 iso-8859-9, latin5, L5 土耳其语
iso8859_10 iso-8859-10, latin6, L6 北欧语言
iso8859_11 iso-8859-11, thai 泰语
iso8859_13 iso-8859-13, latin7, L7 波罗的海语言
iso8859_14 iso-8859-14, latin8, L8 凯尔特语
iso8859_15 iso-8859-15, latin9, L9 西欧
iso8859_16 iso-8859-16, latin10, L10 东南欧
johab cp1361, ms1361 韩语
koi8_r 俄语
koi8_t 塔吉克3.5 新版功能.
koi8_u 乌克兰语
kz1048 kz_1048, strk1048_2002, rk1048 哈萨克语3.5 新版功能.
mac_cyrillic maccyrillic 保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
mac_greek macgreek 希腊语
mac_iceland maciceland 冰岛语
mac_latin2 maclatin2, maccentraleurope 中欧和东欧
mac_roman macroman, macintosh 西欧
mac_turkish macturkish 土耳其语
ptcp154 csptcp154, pt154, cp154, cyrillic-asian 哈萨克语
shift_jis csshiftjis, shiftjis, sjis, s_jis 日语
shift_jis_2004 shiftjis2004, sjis_2004, sjis2004 日语
shift_jisx0213 shiftjisx0213, sjisx0213, s_jisx0213 日语
utf_32 U32, utf32 所有语言
utf_32_be UTF-32BE 所有语言
utf_32_le UTF-32LE 所有语言
utf_16 U16, utf16 所有语言
utf_16_be UTF-16BE 所有语言
utf_16_le UTF-16LE 所有语言
utf_7 U7, unicode-1-1-utf-7 所有语言
utf_8 U8, UTF, utf8, cp65001 所有语言
utf_8_sig 所有语言

在 3.4 版更改: utf-16* 和 utf-32* 编码器将不再允许编码代理码位 (U+D800U+DFFF)。 utf-32* 解码器将不再解码与代理码位相对应的字节序列。

在 3.8 版更改: cp65001 现在是 utf_8 的一个别名。

Python 专属的编码格式

有一些预定义编解码器是 Python 专属的,因此它们在 Python 之外没有意义。 这些编解码器按其所预期的输入和输出类型在下表中列出(请注意虽然文本编码是编解码器最常见的使用场景,但下层的编解码器架构支持任意数据转换而不仅是文本编码)。 对于非对称编解码器,该列描述的含义是编码方向。

文字编码

以下编解码器提供了 strbytes 的编码和 bytes-like object 到 str 的解码,类似于 Unicode 文本编码。

编码 别名 含义
idna 实现 RFC 3490,另请参阅 encodings.idna 。仅支持 errors='strict'
mbcs ansi, dbcs Windows 专属:根据 ANSI 代码页(CP_ACP)对操作数进行编码。
oem Windows 专属:根据 OEM 代码页(CP_OEMCP)对操作数进行编码。3.6 新版功能.
palmos PalmOS 3.5 的编码格式
punycode 实现 RFC 3492。 不支持有状态编解码器。
raw_unicode_escape Latin-1 编码格式附带对其他码位以 \uXXXX\UXXXXXXXX 进行编码。 现有反斜杠不会以任何方式转义。 它被用于 Python 的 pickle 协议。
undefined 所有转换都将引发异常,甚至对空字符串也不例外。 错误处理方案会被忽略。
unicode_escape 适合用于以 ASCII 编码的 Python 源代码中的 Unicode 字面值内容的编码格式,但引号不会被转义。 对 Latin-1 源代码进行解码。 请注意 Python 源代码实际上默认使用 UTF-8。

在 3.8 版更改: “unicode_internal” 编解码器已被移除。

二进制转换

以下编解码器提供了二进制转换: bytes-like object 到 bytes 的映射。 它们不被 bytes.decode() 所支持(该方法只生成 str 类型的输出)。

编码 别名 含义 编码器/解码器
base64_codec 1 base64, base_64 将操作数转换为多行 MIME base64 (结果总是包含一个末尾的 '\n')在 3.4 版更改: 接受任意 bytes-like object 作为输入用于编码和解码 base64.encodebytes() / base64.decodebytes()
bz2_codec bz2 使用bz2压缩操作数 bz2.compress() / bz2.decompress()
hex_codec hex 将操作数转换为十六进制表示,每个字节有两位数 binascii.b2a_hex() / binascii.a2b_hex()
quopri_codec quopri, quotedprintable, quoted_printable 将操作数转换为 MIME 带引号的可打印数据 quopri.encode()quotetabs=True / quopri.decode()
uu_codec uu 使用uuencode转换操作数 uu.encode() / uu.decode()
zlib_codec zip, zlib 使用gzip压缩操作数 zlib.compress() / zlib.decompress()
  • 1

    除了 字节类对象,'base64_codec' 也接受仅包含 ASCII 的 str 实例用于解码

3.2 新版功能: 恢复二进制转换。

在 3.4 版更改: 恢复二进制转换的别名。

文字转换

以下编解码器提供了文本转换: strstr 的映射。 它不被 str.encode() 所支持(该方法只生成 bytes 类型的输出)。

编码 别名 含义
rot_13 rot13 返回操作数的凯撒密码加密结果

3.2 新版功能: 恢复 rot_13 文本转换。

在 3.4 版更改: 恢复 rot13 别名。

encodings.idna — 应用程序中的国际化域名

此模块实现了 RFC 3490 (应用程序中的国际化域名) 和 RFC 3492 (Nameprep: 用于国际化域名 (IDN) 的 Stringprep 配置文件)。 它是在 punycode 编码格式和 stringprep 的基础上构建的。

这些 RFC 共同定义了一个在域名中支持非 ASCII 字符的协议。 一个包含非 ASCII 字符的域名 (例如 www.Alliancefrançaise.nu) 会被转换为兼容 ASCII 的编码格式 (简称 ACE,例如 www.xn--alliancefranaise-npb.nu)。 随后此域名的 ACE 形式可以用于所有由于特定协议而不允许使用任意字符的场合,例如 DNS 查询,HTTP Host 字段等等。 此转换是在应用中进行的;如有可能将对用户可见:应用应当透明地将 Unicode 域名标签转换为线上的 IDNA,并在 ACE 标签被呈现给用户之前将其转换回 Unicode。

Python 以多种方式支持这种转换: idna 编解码器执行 Unicode 和 ACE 之间的转换,基于在 section 3.1 of RFC 3490 中定义的分隔字符将输入字符串拆分为标签,再根据需要将每个标签转换为 ACE,相反地又会基于 . 分隔符将输入字节串拆分为标签,再将找到的任何 ACE 标签转换为 Unicode。 此外,socket 模块可透明地将 Unicode 主机名转换为 ACE,以便应用在将它们传给 socket 模块时无须自行转换主机名。 除此之外,许多包含以主机名作为函数参数的模块例如 http.clientftplib 都接受 Unicode 主机名(并且 http.client 也会在 Host 字段中透明地发送 IDNA 主机名,如果它需要发送该字段的话)。

当从线路接收主机名时(例如反向名称查找),到 Unicode 的转换不会自动被执行:希望向用户提供此种主机名的应用应当将它们解码为 Unicode。

encodings.idna 模块还实现了 nameprep 过程,该过程会对主机名执行特定的规范化操作,以实现国际域名的大小写不敏感特性与合并相似的字符。 如果有需要可以直接使用 nameprep 函数。

  • encodings.idna.``nameprep(label)

    返回 label 经过名称处理操作的版本。 该实现目前基于查询字符串,因此 AllowUnassigned 为真值。

  • encodings.idna.``ToASCII(label)

    将标签转换为 ASCII,规则定义见 RFC 3490UseSTD3ASCIIRules 预设为假值。

  • encodings.idna.``ToUnicode(label)

    将标签转换为 Unicode,规则定义见 RFC 3490

encodings.mbcs — Windows ANSI代码页

此模块实现ANSI代码页(CP_ACP)。

Availability: 仅Windows可用

在 3.3 版更改: 支持任何错误处理

在 3.2 版更改: 在 3.2 版之前, errors 参数会被忽略;总是会使用 'replace' 进行编码,并使用 'ignore' 进行解码。

encodings.utf_8_sig — 带BOM签名的UTF-8编解码器

此模块实现了 UTF-8 编解码器的一个变种:在编码时将把 UTF-8 已编码 BOM 添加到 UTF-8 编码字节数据的开头。 对于有状态编码器此操作只执行一次(当首次写入字节流时)。 在解码时将跳过数据开头作为可选项的 UTF-8 已编码 BOM。

特别篇之(标准编码)相关推荐

  1. 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲

    [STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...

  2. 第三篇:字符编码、数据类型

    #第三篇:字符编码.数据类型 ##3.1字符编码介绍 一.什么是字符编码 计算机要想工作必须通电,即用'电'驱使计算机干活,也就是说'电'的特性决定了计算机的特性.电的特性即高低电平(人类从逻辑上将二 ...

  3. 【Linux】特别篇--SMBus 协议

    [Linux]特别篇--SMBus 协议 一.SMBus 简介 二.SMBus 与 I2C 区别 三.SMBus协议分析 3.1 符号含义 3.2 SMBus Quick Command 3.3 SM ...

  4. 盘一盘 Python 系列特别篇 - 面向对象编程

    本文含 14123 字,53 图表截屏 建议阅读 72 分钟 0 引言 在写 Keras (下) 时,发现很多内容都要用到类 (class) 和对象 (object),因此本文作为 Python 系列 ...

  5. python 找质数的个数_盘一盘 Python 系列特别篇 All 和 Any

    本文含 3758 字,9图表截屏建议阅读 10 分钟 本文是 Python 系列的特别篇的第十四篇 特别篇 1 - PyEcharts TreeMap 特别篇 2 - 面向对象编程 特别篇 3 - 两 ...

  6. 玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...

    原标题:阿里云数据库专家玄惭的"武功"全记录之最佳实践.双十一特别篇 专题简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11 ...

  7. 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史

    -- 写在前面 -- 2018年6月22日,<侏罗纪世界2:失落王国>全球上映:4月16日,乐高同名系列套装全球发售.恐龙是一个伴随了乐高产品二十余年的主题,其实在一年以前就有这样一个计划 ...

  8. 如何用三元组表表示下列稀疏矩阵_盘一盘 Python 系列特别篇21之:SciPy 稀疏矩阵...

    引言 和稠密矩阵相比,稀疏矩阵的最大好处就是节省大量的内存空间来储存零.稀疏矩阵本质上还是矩阵,只不过多数位置是空的,那么存储所有的 0 非常浪费.稀疏矩阵的存储机制有很多种 (列出常用的五种): C ...

  9. 非常好的一篇关于MYSQL编码问题的文章

    非常好的一篇关于MYSQL编码问题的文章 问题:通过sql语言向数据库中添加中文的数据的时候,查询是显示的是乱码. 原因:当初安装数据库是默认的编码是latin1编码(Latin1是ISO-8859- ...

最新文章

  1. node源码详解(四) —— js代码如何调用C++的函数
  2. centos7 jenkins 安装
  3. Java垃圾回收机制分析
  4. 机器学习算法的差异_我们的机器学习算法可放大偏差并永久保留社会差异
  5. 如何移植Android源码里面的东西到NDK
  6. Apache Roller 5.0 安装部署
  7. 惠普薄锐ENVY 15 X360升级DIY
  8. 微信模板消息发送不显示小程序链接的处理
  9. 白天工作效率低,晚上效率高怎么调整过来?
  10. C++ 实现贪吃蛇游戏(免费附源码)
  11. Web是什么,Web简单介绍
  12. 深度学习系列24:开源抠图算法
  13. pythonmath反三角函数的导数_Python求离散序列导数的示例
  14. 书上得来终觉浅,绝知此事要躬行-以太坊平台实战篇
  15. 学习stm32单片机,必备工具和软件,你知道几个?
  16. Android内存检测工具系列工具集
  17. ArcGIS Server发布地理处理(GP)服务并调用
  18. java圆形矩形直线文字设计图_如何设计圆形文字logo?怎么让文字按圆形走?圆形文字logo...
  19. Symbol的具体用法
  20. 全面解析5种常见悬挂 麦弗逊式独立悬挂

热门文章

  1. es6怎么将对象转换为数组
  2. 日常工作要想有效提高工作效率 常用的在线工具网站
  3. Word文档转换Markdown文档
  4. 电气设备常用文字符号新旧对照表
  5. 一款产品经理值得拥有的团队协作神器—飞项
  6. 3D视觉检测:智能工业机器人从平面到立体的“视界”升级
  7. 掌优刷脸支付刷出移动支付新热度
  8. RAD0.1 RB.1/.2
  9. Deep Feedback Network for Recommendation用于推荐系统的深度反馈网络
  10. 小米智能插座监控设备耗电,并自动断电