Na przykład mam taki ciąg (zwracana wartość subprocess.check_output
):
>>> b'a string'
b'a string'
Cokolwiek zrobiłem, zawsze jest drukowane z irytującym b'
przed ciągiem:
>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
Czy ktoś ma jakieś pomysły na temat używania go jako normalnego ciągu lub konwersji go na normalny ciąg?
python
string
python-3.x
binary
Hanfei Sun
źródło
źródło
Odpowiedzi:
Odkoduj to.
Aby pobrać bajty z ciągu, zakoduj go.
źródło
ascii
ponieważ podany ciąg został wykonany z liter ascii. Nie musisz określać kodowania, jeśli jest to kodowanieutf-8
(domyślne w Pythonie 3.x zgodnie zstr.encode
,bytes.decode
doc-string)import locale
i wtedyos_encoding = locale.getpreferredencoding()
. W ten sposób możemy dekodować za pomocąmy_b_string.decode(os_encoding)
sys.getfilesystemencoding()
,sys.stdin.encoding
,sys.stdout.encoding
. IMHO, użycie tych automatycznych detekcji kodowania może rozwiązać problem, ponieważ podprogram (OP używa podproces) może zostać napisany w inny sposób, aby określić kodowanie (lub nawet zakodowane na stałe). W każdym razie dziękuję za opinie.sys.getfilesystemencoding()
zwraca nazwę kodowania używanego do konwersji między nazwami plików Unicode i nazwami bajtów i jest silnie zależna od używanego systemu operacyjnego. AFAIK, ta funkcja służy do konwersji na preferowaną reprezentację systemu. Oznacza to, że nie będzie wnioskować o kodyfikacji używanej przez konsolę, którą można uzyskać za pomocą wyżej wspomnianejlocale.getpreferredencoding()
funkcjiJeśli odpowiedź z falsetru nie zadziała, możesz także spróbować:
źródło
Zobacz oficjalną
encode()
idecode()
dokumentację zcodecs
biblioteki.utf-8
jest domyślnym kodowaniem funkcji, ale istnieją wersje szeregowe w Pythonie 3 standardowe kodowania , takie jaklatin_1
lubutf_32
.źródło