我正在使用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
我将如何转换此字符串?
答案 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', '')
但是在输入是一些完全不同的编码的情况下,这不会引发异常,因此它可能会隐藏指定您预期会捕获的错误。