特别篇之(标准编码)
标准编码
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+D800
–U+DFFF
)。 utf-32* 解码器将不再解码与代理码位相对应的字节序列。
在 3.8 版更改: cp65001
现在是 utf_8
的一个别名。
Python 专属的编码格式
有一些预定义编解码器是 Python 专属的,因此它们在 Python 之外没有意义。 这些编解码器按其所预期的输入和输出类型在下表中列出(请注意虽然文本编码是编解码器最常见的使用场景,但下层的编解码器架构支持任意数据转换而不仅是文本编码)。 对于非对称编解码器,该列描述的含义是编码方向。
文字编码
以下编解码器提供了 str
到 bytes
的编码和 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 版更改: 恢复二进制转换的别名。
文字转换
以下编解码器提供了文本转换: str
到 str
的映射。 它不被 str.encode()
所支持(该方法只生成 bytes
类型的输出)。
编码 | 别名 | 含义 |
---|---|---|
rot_13 | rot13 | 返回操作数的凯撒密码加密结果 |
3.2 新版功能: 恢复 rot_13
文本转换。
在 3.4 版更改: 恢复 rot13
别名。
encodings.idna
— 应用程序中的国际化域名
当从线路接收主机名时(例如反向名称查找),到 Unicode 的转换不会自动被执行:希望向用户提供此种主机名的应用应当将它们解码为 Unicode。
encodings.idna.``nameprep
(label)返回 label 经过名称处理操作的版本。 该实现目前基于查询字符串,因此
AllowUnassigned
为真值。encodings.idna.``ToASCII
(label)将标签转换为 ASCII,规则定义见 RFC 3490。
UseSTD3ASCIIRules
预设为假值。encodings.idna.``ToUnicode
(label)将标签转换为 Unicode,规则定义见 RFC 3490。
encodings.mbcs
— Windows ANSI代码页
在 3.2 版更改: 在 3.2 版之前, errors 参数会被忽略;总是会使用 'replace'
进行编码,并使用 'ignore'
进行解码。
encodings.utf_8_sig
— 带BOM签名的UTF-8编解码器
特别篇之(标准编码)相关推荐
- 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲
[STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...
- 第三篇:字符编码、数据类型
#第三篇:字符编码.数据类型 ##3.1字符编码介绍 一.什么是字符编码 计算机要想工作必须通电,即用'电'驱使计算机干活,也就是说'电'的特性决定了计算机的特性.电的特性即高低电平(人类从逻辑上将二 ...
- 【Linux】特别篇--SMBus 协议
[Linux]特别篇--SMBus 协议 一.SMBus 简介 二.SMBus 与 I2C 区别 三.SMBus协议分析 3.1 符号含义 3.2 SMBus Quick Command 3.3 SM ...
- 盘一盘 Python 系列特别篇 - 面向对象编程
本文含 14123 字,53 图表截屏 建议阅读 72 分钟 0 引言 在写 Keras (下) 时,发现很多内容都要用到类 (class) 和对象 (object),因此本文作为 Python 系列 ...
- python 找质数的个数_盘一盘 Python 系列特别篇 All 和 Any
本文含 3758 字,9图表截屏建议阅读 10 分钟 本文是 Python 系列的特别篇的第十四篇 特别篇 1 - PyEcharts TreeMap 特别篇 2 - 面向对象编程 特别篇 3 - 两 ...
- 玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
原标题:阿里云数据库专家玄惭的"武功"全记录之最佳实践.双十一特别篇 专题简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11 ...
- 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史
-- 写在前面 -- 2018年6月22日,<侏罗纪世界2:失落王国>全球上映:4月16日,乐高同名系列套装全球发售.恐龙是一个伴随了乐高产品二十余年的主题,其实在一年以前就有这样一个计划 ...
- 如何用三元组表表示下列稀疏矩阵_盘一盘 Python 系列特别篇21之:SciPy 稀疏矩阵...
引言 和稠密矩阵相比,稀疏矩阵的最大好处就是节省大量的内存空间来储存零.稀疏矩阵本质上还是矩阵,只不过多数位置是空的,那么存储所有的 0 非常浪费.稀疏矩阵的存储机制有很多种 (列出常用的五种): C ...
- 非常好的一篇关于MYSQL编码问题的文章
非常好的一篇关于MYSQL编码问题的文章 问题:通过sql语言向数据库中添加中文的数据的时候,查询是显示的是乱码. 原因:当初安装数据库是默认的编码是latin1编码(Latin1是ISO-8859- ...
最新文章
- node源码详解(四) —— js代码如何调用C++的函数
- centos7 jenkins 安装
- Java垃圾回收机制分析
- 机器学习算法的差异_我们的机器学习算法可放大偏差并永久保留社会差异
- 如何移植Android源码里面的东西到NDK
- Apache Roller 5.0 安装部署
- 惠普薄锐ENVY 15 X360升级DIY
- 微信模板消息发送不显示小程序链接的处理
- 白天工作效率低,晚上效率高怎么调整过来?
- C++ 实现贪吃蛇游戏(免费附源码)
- Web是什么,Web简单介绍
- 深度学习系列24:开源抠图算法
- pythonmath反三角函数的导数_Python求离散序列导数的示例
- 书上得来终觉浅,绝知此事要躬行-以太坊平台实战篇
- 学习stm32单片机,必备工具和软件,你知道几个?
- Android内存检测工具系列工具集
- ArcGIS Server发布地理处理(GP)服务并调用
- java圆形矩形直线文字设计图_如何设计圆形文字logo?怎么让文字按圆形走?圆形文字logo...
- Symbol的具体用法
- 全面解析5种常见悬挂 麦弗逊式独立悬挂