2013-05-25 15 views
48

Wystarczy opublikowania tego, aby można było sprawdzić to później, jak to zawsze wydaje się ogarek mnie:zwalczaniu/druk bez b”przedrostek dla bajtów w Pythonie 3

$ 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'" 

W pytaniu: jak drukować binarny (bytes) ciąg w języku Python 3, bez prefiksu b'?

+0

pokrewne: [? Jak napisać bajtów do pliku w Pythonie 3 bez znajomości kodowania] (https://stackoverflow.com/q/ 4290716/4279) – jfs

Odpowiedz

54

Zastosowanie decode:

>>> print(curses.version.decode('utf-8')) 
2.2 
+11

'.decode()' dekoduje 'utf-8' również domyślnie – jamylak

+1

Pamiętaj, że możesz przyjąć własną odpowiedź. – Tim

+0

@jamylak to przypomnienie, że może zaakceptować parametr –

13

Jeśli bajty użycie odpowiedniego kodowania znaków już; można je wydrukować bezpośrednio:

sys.stdout.buffer.write(data) 

lub

nwritten = os.write(sys.stdout.fileno(), data) # NOTE: it may write less than len(data) bytes 
Powiązane problemy