0

如果我在 python 中这样做:

>>> name = "âțâîâ"
>>> name
'\xc3\xa2\xc8\x9b\xc3\xa2\xc3\xae\xc3\xa2'
>>> len(name)
10
>>> u = name.decode('utf-8')
>>> len (u)
5
>>>

如果您不指定任何,python 中的默认编码是什么?

4

2 回答 2

2

您正在指定一个 python 字符串文字,它们的编码由编辑器的默认设置确定(或者在 python 解释器的情况下,您的终端)。Python 在这方面没有发言权。

默认情况下,python 2 尝试将源代码解释为 ASCII。在 python 3 中,这已被切换到 UTF-8。

请阅读Python Unicode HOWTO以进一步了解 Unicode 与输入和输出编码之间的区别。您还真的应该阅读 Joel Spolksy关于 Unicode 的文章

于 2012-09-12T08:33:37.600 回答
1

可能您正在使用 Python 2。(如果不是,这个答案很糟糕。)

会发生以下情况:

>>> name = "âțâîâ"

您分配给name一个(字节)字符串,其内容由您的终端编码确定。您的文本编辑器。在您的情况下,这显然是 UTF8。

这些字节显示为

>>> name
'\xc3\xa2\xc8\x9b\xc3\xa2\xc3\xae\xc3\xa2'

只有当你用它解码时

>>> u = name.decode('utf-8')

你得到一个unicode字符串。在这里您指定该编码。

一种更简单、更可靠的方法是直接做

u = u"âțâîâ"

然后才根据您想要的编码提取字节:

name = u.encode("utf-8")
于 2012-09-12T08:42:41.523 回答