Hanya memposting ini agar saya dapat mencarinya nanti, karena sepertinya selalu membingungkan saya:
$ python3.2
Python 3.2 (r32:88445, Oct 20 2012, 14:09:50)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print(curses.version)
b'2.2'
>>> print(str(curses.version))
b'2.2'
>>> print(curses.version.encode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
>>> print(str(curses.version).encode('utf-8'))
b"b'2.2'"
Sebagai pertanyaan: bagaimana cara mencetak bytes
string binary ( ) dengan Python 3, tanpa b'
awalan?
python
string
python-3.x
sdaau
sumber
sumber
Jawaban:
Penggunaan
decode
:sumber
utf-8
secara default? Saya tidak ingin menggunakan.decode('utf-8')
setiap kali saya mencetak sesuatu.curses.version
bukan NoneJika byte sudah menggunakan pengkodean karakter yang sesuai; Anda dapat mencetaknya secara langsung:
atau
sumber
Jika kita melihat pada sumbernya
bytes.__repr__
, sepertinyab''
sudah dimasukkan ke dalam metode.Solusi yang paling jelas adalah dengan memotong secara manual
b''
dari hasilrepr()
:sumber
repr(x)[2:-1]
menghasilkan sebuahstr
objek yang akan dicetak sesuai keinginan. Secara khusus,repr(b'\x01')[2:-1]
mengembalikan string\\x01
, sementaradecode()
akan mengembalikan\x01
yang tidak berfungsi seperti yang diinginkanprint()
. Untuk lebih eksplisit lagi,print(repr(b'\x01')[2:-1])
akan mencetak\x01
sementaraprint(b'\x01'.decode())
tidak akan mencetak apa pun.print(repr(b"\x01".decode()))
akan mencetak'\x01'
(string termasuk tanda kutip tunggal), sehinggaprint(repr(b"\x01".decode())[1:-1])
mencetak\x01
(string tanpa tanda kutip tunggal).Jika data dalam format yang kompatibel dengan UTF-8, Anda dapat mengonversi byte menjadi string.
Secara opsional, ubah ke hex terlebih dahulu, jika datanya belum kompatibel dengan UTF-8. Misalnya, saat data dalam byte mentah sebenarnya.
sumber