Menukar Bait kepada String dalam Python 3
Masalah:
Anda telah menangkap output standard program luaran ke dalam objek bait dan perlu memaparkannya sebagai rentetan. Contohnya:
import subprocess p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE) stdout, _ = p.communicate()
Ini akan menghasilkan objek bait seperti:
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n'
Matlamat anda adalah untuk menukar objek bait ini kepada rentetan Python standard.
Penyelesaian:
Untuk menukar objek bait stdout kepada rentetan dalam Python 3, gunakan kaedah decode(). Kaedah ini mengambil pengekodan objek bait sebagai hujah. Begini cara untuk melakukannya:
decoded_stdout = stdout.decode("encoding")
Memilih Pengekodan:
Parameter pengekodan menentukan set aksara yang digunakan untuk menyahkod bait. Dalam contoh yang diberikan, UTF-8 diandaikan sebagai pengekodan lalai. Walau bagaimanapun, adalah penting untuk menggunakan pengekodan sebenar data anda.
Jika anda tidak mengetahui pengekodan, anda boleh cuba menggunakan "utf-8". Sebagai alternatif, anda boleh menggunakan perpustakaan seperti chardet untuk mengesan pengekodan secara automatik.
Contoh:
Menggunakan UTF-8 sebagai pengekodan yang diandaikan:
decoded_stdout = stdout.decode("utf-8")
Kini anda boleh mencetak rentetan yang dinyahkod anda:
print(decoded_stdout) # Output: # -rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
Atas ialah kandungan terperinci Bagaimanakah Saya Menukar Objek Bytes kepada String dalam Python 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!