繁体   English   中英

如何使用python解码utf 16中存在的这个字符串

[英]how to decode this string present in utf 16 using python

如何使用python3解码utf-16中存在的这个字符串

"b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'"

试过这个但得到错误 TypeError: a bytes-like object is required, not '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'

您有一个字符串,它是通过对编码文本(字节实例)调用str来创建的。 像这样:

>>> 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来恢复字节,然后可以通过调用它们的 decode 方法将字节解码回字符串。

>>> 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

您似乎在要解码的内容的开头和结尾有一些额外的"

这对我来说很好用:

>>> b'\\xff\\xfeS\\x00H\\x00A\\x00D\\x00E\\x00K\\x00 \\x00D\\x00E\\x00E\\x00E\\x00P\\x00'.decode('utf-16')
>>> '硜晦硜敦屓へ䠰硜〰屁へ䐰硜〰居へ䬰硜〰尠へ䐰硜〰居へ䔰硜〰居へ倰硜〰'

更新:正如 Reznik 建议的那样,您应该删除额外的\\字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM