【发布时间】:2012-07-20 12:07:15
【问题描述】:
我正在寻找一种将用户提供的字符串转换为 UTF-8 的简单方法。它不必非常聪明。它应该处理所有 ASCII 字节字符串和所有 Unicode 字符串(2.x unicode,3.x str)。
由于 unicode 在 3.x 中消失并且 str 改变了含义,我认为检查 decode 方法的存在可能是个好主意,并在没有参数的情况下调用它让 Python 找出根据语言环境来做,而不是做isinstance 检查。事实证明这根本不是一个好主意:
>>> u"één"
u'\xe9\xe9n'
>>> u"één".decode()
Traceback (most recent call last):
File "<ipython-input-36-85c1b388bd1b>", line 1, in <module>
u"één".decode()
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
我的问题有两个:
- 为什么会有
unicode.decode方法呢?我认为 Unicode 字符串被认为是“未编码”。这看起来是获得双重编码字符串的可靠方法。 - 如何以与 Python 3 前向兼容的方式解决此问题?
【问题讨论】:
-
这与 Python 3 修复的 Unicode 字符串上的 decode 方法完全一样。
标签: python unicode character-encoding python-3.x python-2.x