Python 3.5 中编码 utf-8 和 utf8 的区别

Posted

技术标签:

【中文标题】Python 3.5 中编码 utf-8 和 utf8 的区别【英文标题】:Difference between encoding utf-8 and utf8 in Python 3.5 【发布时间】:2016-05-24 20:04:48 【问题描述】:

编码utf-8utf8有什么区别(如果有的话)?

举个例子:

u = u'€'
print('utf-8', u.encode('utf-8'))
print('utf8 ', u.encode('utf8'))

它产生以下输出:

utf-8 b'\xe2\x82\xac'
utf8  b'\xe2\x82\xac'

【问题讨论】:

输出是一样的,不是吗? 问题很重要,因为Perl有一些不同effectiveperlprogramming.com/2011/08/… 【参考方案1】:

没有区别。请参阅table of standard encodings。专门针对'utf_8',以下都是有效的别名:

'U8', 'UTF', 'utf8'

还要注意第一段的陈述:

请注意,仅大小写不同或使用连字符代替下划线的拼写替代方案也是有效的别名;因此,例如'utf-8''utf_8' 编解码器的有效别名

【讨论】:

我可能错了,但似乎 Python 中的规范名称是 utf_8,而英文专有名称是“UTF-8”。【参考方案2】:

您还可以使用encodings 模块检查特定编码的别名,这样,它将为您提供一个与别名匹配的键作为值:

>>> from encodings.aliases import aliases
>>> 
>>> for k,v in aliases.items():
    if 'utf_8' in v:
        print('Encoding name::>10 -- Module Name: :'.format(k,v))


Encoding name:       utf -- Module Name: utf_8
Encoding name:        u8 -- Module Name: utf_8
Encoding name: utf8_ucs4 -- Module Name: utf_8
Encoding name: utf8_ucs2 -- Module Name: utf_8
Encoding name:      utf8 -- Module Name: utf_8

正如mgilson 的回答所指出的那样:

请注意,仅在大小写不同或使用 连字符而不是下划线也是有效的别名;所以, 例如“utf-8”是“utf_8”编解码器的有效别名。

【讨论】:

很高兴知道!

以上是关于Python 3.5 中编码 utf-8 和 utf8 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Unicode编码和UTF-8编码解析

使用 python 3.5 从静态 HTML 文件中提取数据

python字符编码转换

oracle编码gbk加载utf-8文件需要转码么?

为 Apache 配置 UTF-8 中文编码

乱码的简单认识和解决