如果我在 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 中的默认编码是什么?
您正在指定一个 python 字符串文字,它们的编码由编辑器的默认设置确定(或者在 python 解释器的情况下,您的终端)。Python 在这方面没有发言权。
默认情况下,python 2 尝试将源代码解释为 ASCII。在 python 3 中,这已被切换到 UTF-8。
请阅读Python Unicode HOWTO以进一步了解 Unicode 与输入和输出编码之间的区别。您还真的应该阅读 Joel Spolksy关于 Unicode 的文章。
可能您正在使用 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")