Python 2.7,将utf8字符串转换为ascii

时间:2016-11-16 04:32:02

标签: python-2.7 utf-8

我正在使用python 2.7.12 我有一个包含unicode文字的字符串,它不是Unicode类型。我想将其转换为文本。这个例子解释了我想要做的事情。

>>> s
'\x00u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00'
>>> print s
username
>>> type(s)
<type 'str'>
>>> s == "username"
False

我将如何转换此字符串?

1 个答案:

答案 0 :(得分:1)

这不是UTF-8,它是UTF-16,虽然它不清楚它是大端还是小端(你没有BOM,你有一个前导和尾随NUL字节,使其长度不均匀)。对于ASCII范围内的文本,UTF-8与ASCII无法区分,而UTF-16则将NUL字节与ASCII编码字节交替(如示例所示)。

无论如何,转换为纯ASCII非常简单,你只需要以这种或那种方式处理不均匀的长度:

s = 'u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00' # I removed \x00 from beginning manually
sascii = s.decode('utf-16-le').encode('ascii')

# Or without manually removing leading \x00
sascii = s.decode('utf-16-be', errors='ignore').encode('ascii')

当然,如果您的输入只是NUL穿插的ASCII并且您无法确定字节顺序或如何获得偶数个字节,那么您可以欺骗:

sascii = s.replace('\x00', '')

但是在输入是一些完全不同的编码的情况下,这不会引发异常,因此它可能会隐藏指定您预期会捕获的错误。