Python3 字节编码



我正在使用python3,我对对象的表示有问题。
它是subprocess.Open().communicate()[0]的结果,这是一个字节数组,但是当我将其传递给另一个函数时,python 将其解释为字符串,事实并非如此。

b'N\x00e\x00l\x00 \x00s\x00o\x00t\x00t\x00o\x00s\x00i\x00s\x00t\x00e\x00m\x00a\x00 \x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00p\x00e\x00r\x00 \x00L\x00i\x00n\x00u\x00x\x00 \x00n\x00o\x00n\x00 \x00s\x00o\x00n\x00o\x00 \x00i\x00n\x00s\x00t\x00a\x00l\x00l\x00a\x00t\x00e\x00 \x00d\x00i\x00s\x00t\x00r\x00i\x00b\x00u\x00z\x00i\x00o\x00n\x00i\x00.\x00\r\x00\x00\x00\x00L\x00e\x00 \x00d\x00i\x00s\x00t\x00r\x00i\x00b\x00u\x00z\x00i\x00o\x00n\x00i\x00 \x00p\x00o\x00s\x00s\x00o\x00n\x00o\x00 \x00e\x00s\x00s\x00e\x00r\x00e\x00 \x00i\x00n\x00s\x00t\x00a\x00l\x00l\x00a\x00t\x00e\x00 \x00V\X00I\X00S\X00I\X00T\X00A\X00N\X00D\X00O\X00 \x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00

\x00S\x00t\x00o\x00r\x00e\x00:\x00\r\x00\x00\x00h\x00t\x00t\x00p\x00s\x00:\x00/\x00a\x00k\x00a\x00.\x00m\x00s\x00/\x00w\x00s\x00l\x00s\x00s\x00t\x00o\x00r\x00e\x00\x00\r\x00\x00\x00'

哪个是ASCII编码,对吧?

我的问题是如何对其进行编码以查看正确的字节值?
或者至少有一种方法可以在不将其识别为字符串的情况下将其传递给另一个函数,但事实并非如此?

谢谢!

你可以用.decode('utf-8')解码它 要删除空字节,请使用.replace(b'x00', b'')

subprocessoutput = b'Nx00ex00lx00 x00sx00ox00tx00tx00ox00sx00ix00sx00tx00ex00mx00ax00 x00Wx00ix00nx00dx00ox00wx00sx00 x00px00ex00rx00 x00Lx00ix00nx00ux00xx00 x00nx00ox00nx00 x00sx00ox00nx00ox00 x00ix00nx00sx00tx00ax00lx00lx00ax00tx00ex00 x00dx00ix00sx00tx00rx00ix00bx00ux00zx00ix00ox00nx00ix00.x00rx00rx00nx00Lx00ex00 x00dx00ix00sx00tx00rx00ix00bx00ux00zx00ix00ox00nx00ix00 x00px00ox00sx00sx00ox00nx00ox00 x00ex00sx00sx00ex00rx00ex00 x00ix00nx00sx00tx00ax00lx00lx00ax00tx00ex00 x00vx00ix00sx00ix00tx00ax00nx00dx00ox00 x00Mx00ix00cx00rx00ox00sx00ox00fx00tx00 x00Sx00tx00ox00rx00ex00:x00rx00rx00nx00hx00tx00tx00px00sx00:x00/x00/x00ax00kx00ax00.x00mx00sx00/x00wx00sx00lx00sx00tx00ox00rx00ex00rx00rx00nx00'
print(subprocessoutput.replace(b'x00', b'').decode('utf-8'))

编辑: 以下内容将创建一个包含十进制 ASCII 数字的列表:

ascii = [ord(x) for x in subprocessoutput.decode('utf-8')]

问题是这不是 UTF-8,而是 UTF-16。

#!/bin/python3
var = b'Nx00ex00lx00 x00sx00ox00tx00tx00ox00sx00ix00sx00tx00ex00mx00ax00 x00Wx00ix00nx00dx00ox00wx00sx00 x00px00ex00rx00 x00Lx00ix00nx00ux00xx00 x00nx00ox00nx00 x00sx00ox00nx00ox00 x00ix00nx00sx00tx00ax00lx00lx00ax00tx00ex00 x00dx00ix00sx00tx00rx00ix00bx00ux00zx00ix00ox00nx00ix00.x00rx00rx00nx00Lx00ex00 x00dx00ix00sx00tx00rx00ix00bx00ux00zx00ix00ox00nx00ix00 x00px00ox00sx00sx00ox00nx00ox00 x00ex00sx00sx00ex00rx00ex00 x00ix00nx00sx00tx00ax00lx00lx00ax00tx00ex00 x00vx00ix00sx00ix00tx00ax00nx00dx00ox00 x00Mx00ix00cx00rx00ox00sx00ox00fx00tx00 x00Sx00tx00ox00rx00ex00:x00rx00rx00nx00hx00tx00tx00px00sx00:x00/x00/x00ax00kx00ax00.x00mx00sx00/x00wx00sx00lx00sx00tx00ox00rx00ex00rx00rx00nx00'
foo = str(var, 'utf-16')
print(foo)

这会产生

Nel sottosistema Windows per Linux non sono installate distribuzioni. Le distribuzioni possono essere installate visitando Microsoft Store: https://aka.ms/wslstore

最新更新