当前位置: 首页 > 知识库问答 >
问题:

Python3字节编码

苏鸿才
2023-03-14

我正在使用python3,我在对象的表示方面遇到了问题。
它是子进程的结果。Open().communicate()[0],这是一个字节数组,但是当我把它传递给另一个函数时,python把它解释为一个字符串,这不是

b'N\x00e\x00l\x00\x00s\x00o\x00t\x00t\x00o\x00s\x000i\x00d\x00e_x00e\\x00m\x00a\x00\\x00W\x00i\x000n\x00d_x00W\x000s\x00p\x00e\x00r\x00r\x005\x00l\x00i \x00n\x00u\x00x00n\x100o\x100n\x00 o \x00n\x00o\x00\x00i\x00n \x00s\x000t\x00a\x00l\x00l \x00a\ x00t\x00e\x00e\\x00e_x00i\ x0000t\x000r\x00i \x00b\x00u\x00z\x00i-x00o\ x00n\ x00ix00i\x00d\x00i\x00s\x000t\x00r\x00i\\x00b\x00u\x00z\x00i\ x00o\x00i \x00p\x00o\ x00s\x100s\x000o\x000e\x000o\x00 \x00v\x00i\x00s\x00i\ x00t\x00a\x00n\x00d\x00o\x00\x00M\x00i \x00c\x00r\x00o\ x000o\x00\x00S\x00t\x00o\x00r\x00e\x00:\x00\r\x00\r\n\x00\n\x00h\x00d\x00t\x00p\x00S\x00S:\x00/\x00a/\x000a\x00k\x00a\x00.\x00m\x00S/\x00w\x00e\\x00l\x002\x00S\x100s\x00

哪个是 ASCII 编码,对吧?

我的问题是,如何对它进行编码才能看到正确的字节值?< br >或者,至少有一种方法可以将它传递给另一个函数,而不会被识别为字符串,这是不正确的。

谢谢

共有2个答案

白博易
2023-03-14

问题是这不是 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)

这会产生

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

国晟睿
2023-03-14

您可以使用对其进行解码。decode('utf-8')要删除空字节,请使用。替换(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数字列表:

ascii = [ord(x) for x in subprocessoutput.decode('utf-8')]
 类似资料:
  • 问题内容: 我遇到了一些有关JVM / JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。 “编译”和“解释”字节码之间有什么区别? 问题答案: 解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。 编译

  • 问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op

  • 导航 目录 上一章:Lua 与 C/C++ 交互 下一章:LuaJIT 介绍

  • 问题内容: 我正在寻找用Java字节码编写一个简短的程序(也许是Hello World)。我只想使用我的文本编辑器编写字节码并运行它。我该怎么做?有一个例子吗?谢谢! 问题答案: 您可以尝试茉莉! 您可以使用以下命令进行编译: 然后像任何类一样运行它: 更新资料 我看到您的问题提到“不使用Javac或Java”。您能说明一下该声明的意思吗?

  • 问题内容: 什么是好的免费字节码编辑器?我想要一个带有GUI的编辑器… 我没有运气尝试了jbe-0.1b(无法保存字节码更改)。 问题答案: UI并不完美,但是您可以使用Eclipse Bytecode Outline插件将任何Java类转换为ASM代码,对其进行编辑,并生成更改后的类。这可能是目前最轻松的方式。 http://asm.ow2.org/eclipse/index.html

  • 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程: 1、使用你的浏览器访问URL并连接到HTTP web 服务器。 2、Web服务器接收