簡體   English   中英

Python3字節編碼

[英]Python3 Bytes encoding

我正在使用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 \\ x00i \\ x00n \\ x00d \\ x00o \\ x00w \\ x00i \\ x00i \\ x00i \\ x00m x00 \\ x00p \\ x00e \\ x00r \\ x00 \\ x00L \\ x00i \\ x00n \\ x00u \\ x00x \\ x00 \\ x00n \\ x00o \\ x00n \\ x00 \\ x00s \\ x00o \\ x00n \\ x00o \\ x00 \\ x00i \\ x00n \\ x00s \\ x00t \\ x00n 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 \\ x00i \\ x00o \\ x00n \\ x00i \\ x00 \\ x00p \\ x00o \\ x00o \\ x00s \\ x00s \\ x00o \\ x00n \\ x00n \\ x00o \\ x00 \\ x00e \\ x00s \\ x00s \\ x00e \\ x00r \\ x00e \\ x00 \\ x00i \\ x00n \\ x00s \\ x00t \\ x00a \\ x00l \\ x00l \\ x00l \\ x00a \\ x00t \\ x00e \\ x00e \\ x00 \\ x00v \\ x00i \\ x00s \\ x00i \\ x00t \\ x00t \\ 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 \\ x00t \\ x00r \\ x00e \\ x00 \\ r \\ x00 \\ r \\ x00 \\ n \\ x00'

哪個是ASCII編碼,對嗎?

我的問題是如何編碼才能查看正確的字節值?
還是至少有一種方法可以在不將其識別為字符串的情況下將其傳遞給其他函數,這不是嗎?

謝謝!

您可以使用.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')]

問題是這不是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(非Linux)非Windows安裝發行版。 Le distribuzioni possono essere installate visitando Microsoft Store: https ://aka.ms/wslstore

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM