如何使用 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")
您似乎在要解码的内容的开头和结尾有一些额外的"
。
这对我来说很好用:
>>> b'\xff\xfeS\x00H\x00A\x00D\x00E\x00K\x00 \x00D\x00E\x00E\x00E\x00P\x00'.decode('utf-16')
>>> '硜晦硜敦屓へ䠰硜〰屁へ䐰硜〰居へ䬰硜〰尠へ䐰硜〰居へ䔰硜〰居へ倰硜〰'
更新:
正如 Reznik 所建议的,您应该删除多余的 \
个字符。
考虑到您可以编辑此文本,将其更改为:
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'
您有一个字符串,它是通过对编码文本(bytes 实例)调用 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
在 bytes 实例上被调用。
如何使用 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")
您似乎在要解码的内容的开头和结尾有一些额外的"
。
这对我来说很好用:
>>> b'\xff\xfeS\x00H\x00A\x00D\x00E\x00K\x00 \x00D\x00E\x00E\x00E\x00P\x00'.decode('utf-16')
>>> '硜晦硜敦屓へ䠰硜〰屁へ䐰硜〰居へ䬰硜〰尠へ䐰硜〰居へ䔰硜〰居へ倰硜〰'
更新:
正如 Reznik 所建议的,您应该删除多余的 \
个字符。
考虑到您可以编辑此文本,将其更改为:
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'
您有一个字符串,它是通过对编码文本(bytes 实例)调用 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
在 bytes 实例上被调用。