如何使用python3解码utf-16中存在的此字符串
"b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'"
尝试了这个但得到了错误TypeError:需要一个类似字节的对象,而不是'str'
a.rstrip("\n").decode("utf-16")
考虑您可以编辑此文本,将其更改为此:
r = b'\xff\xfeS\x00H\x00A\x00D\x00E\x00K\x00 \x00D\x00E\x00E\x00E\x00P\x00'
print(r.decode('utf-16')) # SHADEK DEEEP
注意之间的更改
"b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'"
b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'
b'\xff\xfeS\x00H\x00A\x00D\x00E\x00K\x00 \x00D\x00E\x00E\x00E\x00P\x00'
您似乎想要解码的内容的开头和结尾处都有一些额外的"
。
这对我来说很好:
>>> b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'.decode('utf-16')
>>> '硜晦硜敦屓へ䠰硜〰屁へ䐰硜〰居へ䬰硜〰尠へ䐰硜〰居へ䔰硜〰居へ倰硜〰'
更新:正如Reznik建议的那样,您应该删除多余的\
个字符。
您有一个通过在编码文本(str
实例)上调用bytes而创建的字符串。像这样:
>>> s = 'abc'
>>> bs = s.encode('utf-16')
>>> bs
b'\xff\xfea\x00b\x00c\x00'
>>> str(bs)
"b'\\xff\\xfea\\x00b\\x00c\\x00'" # <- the 'b' is *inside* the outer quotes
可以通过在字符串上调用ast.literal_eval来恢复字节,然后可以通过调用其解码方法将字节解码回sring。
>>> import ast
>>> s = "b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'"
>>> bs = ast.literal_eval(s)
>>> bs
b'\xff\xfeS\x00H\x00A\x00D\x00E\x00K\x00 \x00D\x00E\x00E\x00E\x00P\x00'
>>> original = bs.decode('utf-16')
>>> original
'SHADEK DEEEP'
这是一种解决方法。正确的解决方案是首先防止在字节实例上调用str
。