我正在使用 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
我将如何转换这个字符串?
这不是 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', '')
但是,在输入是某种完全不同的编码的情况下,这不会引发异常,因此它可能会隐藏指定您期望捕获的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)