0

我正在处理编码问题。我的输入是一个 unicode 字符串,例如:

>>> s
u'\xa6\xe8\xac\xc9'

实际上它是用cp950编码的。我想解码它:(注意没有“u”)

>>> print unicode('\xa6\xe8\xac\xc9', 'cp950')
西界

但是,我不知道如何摆脱那个“u”。直接转换不起作用:

>>> str(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

使用 encode() 的结果不是我想要的:

>>> s.encode('utf8')
'\xc2\xa6\xc3\xa8\xc2\xac\xc3\x89'

我想要的是'\xa6\xe8\xac\xc9'

4

2 回答 2

2

这有点滥用unicode类型。字符串中的unicode字符应为 Unicode 代码点(例如u'\u897f\u754c'),因此与编码无关。str它们不应该是来自特定编码的字节(Python 3 通过将 Unicode strings与 byte strings分开来非常清楚地区分这种情况bytes)。

由于您只想将每个代码点解释为字节,您可以这样做

u'\xa6\xe8\xac\xc9'.encode('iso-8859-1')

因为 Unicode 的前 256 个代码点被定义为等于 ISO-8859-1 的代码点。但是,尝试解决首先给您这个不正确的 Unicode 字符串的问题。

于 2013-01-26T03:17:56.717 回答
0

所以让我们直截了当:你有一个字节序列作为 Unicode 代码点读入,你需要将它们解释为 cp950 吗?

>>> ''.join(chr(ord(c)) for c in s)
'\xa6\xe8\xac\xc9'
>>> print ''.join(chr(ord(c)) for c in s).decode('cp950')
西界
于 2013-01-26T03:36:19.953 回答