我正在使用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 \ r \ x00 \ n \ 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 \ r \ x00 \ n \ x00h \ x00t \ x00t \ x00p \ x00s \ x00:\ x00 / \ x00 / \ x00 / \ x00a \ x00k \ x00a \ x00。\ x00m \ x00s \ x00 / \ x00w \ x00s \ x00l \ x00s \ x00t \ x00o \ x00r \ x00e \ x00 \ r \ x00 \ r \ x00 \ n \ x00'
哪个是ASCII编码,对吗?
我的问题是如何编码才能查看正确的字节值?
还是至少有一种方法可以在不将其识别为字符串的情况下将其传递给其他函数,这不是吗?
谢谢!
答案 0 :(得分:0)
您可以使用.decode('utf-8')
对其进行解码
要删除空字节,请使用.replace(b'\x00', b'')
subprocessoutput = 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\r\x00\n\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\r\x00\n\x00h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00a\x00k\x00a\x00.\x00m\x00s\x00/\x00w\x00s\x00l\x00s\x00t\x00o\x00r\x00e\x00\r\x00\r\x00\n\x00'
print(subprocessoutput.replace(b'\x00', b'').decode('utf-8'))
编辑: 以下创建一个带有十进制数字的列表:
ascii = [ord(x) for x in subprocessoutput.decode('utf-8')]
答案 1 :(得分:0)
问题在于这不是UTF-8,而是UTF-16。
#!/bin/python3
var = 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\r\x00\n\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\r\x00\n\x00h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00a\x00k\x00a\x00.\x00m\x00s\x00/\x00w\x00s\x00l\x00s\x00t\x00o\x00r\x00e\x00\r\x00\r\x00\n\x00'
foo = str(var, 'utf-16')
print(foo)
这产生
根据Linux的Nel sottosistema Windows非声音安装分发版。 Le distribuzioni possono essere安装访问Microsoft Store: https://aka.ms/wslstore