Misalnya, saya memiliki string seperti ini (nilai balik subprocess.check_output
):
>>> b'a string'
b'a string'
Apa pun yang saya lakukan untuk itu, selalu dicetak dengan mengganggu b'
sebelum string:
>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
Adakah yang punya ide tentang cara menggunakannya sebagai string normal atau mengubahnya menjadi string normal?
python
string
python-3.x
binary
Hanfei Sun
sumber
sumber
Jawaban:
Dekode itu.
Untuk mendapatkan byte dari string, disandikan.
sumber
ascii
karena string yang diberikan dibuat dengan huruf ascii. Anda tidak perlu menentukan penyandian jika penyandiannya adalahutf-8
(default dalam Python 3.x menurutstr.encode
,bytes.decode
doc-string)import locale
kemudianos_encoding = locale.getpreferredencoding()
. Dengan cara ini, kita dapat mendekode menggunakanmy_b_string.decode(os_encoding)
sys.getfilesystemencoding()
,sys.stdin.encoding
,sys.stdout.encoding
. IMHO, menggunakan deteksi pengodean otomatis dapat memecahkan masalah karena sub-program (OP menggunakan subproses) dapat ditulis dengan cara lain untuk menentukan pengodean (atau bahkan hard-coded). Terima kasih atas umpan baliknya.sys.getfilesystemencoding()
mengembalikan nama pengkodean yang digunakan untuk mengkonversi antara nama file Unicode dan byte nama file dan sangat bergantung pada sistem operasi yang Anda gunakan. AFAIK, fungsi ini digunakan untuk mengkonversi ke representasi sistem yang lebih disukai. Itu berarti bahwa itu tidak akan menyimpulkan kodifikasi yang digunakan oleh konsol yang dapat diperoleh dengan menggunakanlocale.getpreferredencoding()
fungsi yang disebutkan di atasJika jawaban dari falsetru tidak berfungsi, Anda juga dapat mencoba:
sumber
Silakan, lihat kantor
encode()
dandecode()
dokumentasi daricodecs
perpustakaan.utf-8
adalah pengkodean default untuk fungsi, tetapi ada beberapa pengkodean standar dalam Python 3, sepertilatin_1
atauutf_32
.sumber