Hoe bytes naar String te converteren in Python 2 en Python 3
- Converteer Bytes naar String in Python 2.x
- Converteer Bytes naar String in Python 3.x
- Prestatievergelijking en conclusie van verschillende methoden voor het converteren van bytes naar tekenreeks

In dit tutorial artikel wordt uitgelegd hoe je kan converteren bytes
naar een tekenreeks in Python 2.x en Python 3.x.
Converteer Bytes naar String in Python 2.x
bytes
in Python 2.7 is identiek aan str
, dus de geïnitieerde variabele bytes
is intrinsiek de string.
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> A = b'cd'
>>> A
'cd'
>>> type(A)
<type 'str'>
Converteer Bytes naar String in Python 3.x
bytes
is een nieuw gegevenstype dat is geïntroduceerd in Python 3.
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> A = b'cd'
>>> A
b'cd'
>>> type(A)
<class 'bytes'>
>>>
Het gegevenstype van elementen in de bytes
is int
.
>>> A = b'cd'
>>> A[0]
99
>>> type(A[0])
<class 'int'>
Converteer Bytes naar String met behulp decode
van Python 3.x
.decode
methode van bytes
kon bytes naar string converteren met de gegeven encoding
methode. In de meeste gevallen is het OK als u de encoding
methode als standaard laat staan utf-8
, maar het is niet altijd veilig omdat de bytes kunnen worden gecodeerd met een andere coderingsmethode in plaats van utf-8
.
>>> b'\x50\x51'.decode()
'PQ'
>>> b'\x50\x51'.decode('utf-8')
'PQ'
>>> b'\x50\x51'.decode(encoding = 'utf-8')
'PQ'
De drie manieren om de bytes
bovenstaande te decoderen zijn identiek omdat utf-8
deze als coderingsmethode wordt gebruikt.
Het kan fouten veroorzaken wanneer het utf-8
wordt gebruikt, maar de bytes zijn er niet mee gecodeerd.
>>> b'\x50\x51\xffed'.decode('utf-8')
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
b'\x50\x51\xffed'.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 2: invalid start byte
We begrijpen UnicodeDecodeError
dat het utf-8
niet juist is codec
.
We hebben twee benaderingen om dit encoding
probleem op te lossen.
backslashreplace
, ignore
of replace
als parameters voor errors
decode
heeft de andere parameter naast encoding
- errors
. Het definieert het gedrag wanneer een error
gebeurt. De standaardwaarde van errors
is strict
dat dit een fout veroorzaakt als de fout optreedt tijdens het decoderingsproces.
error
heeft andere opties zoals ignore
, replace
of andere geregistreerde codecs.register_error
namen, backslashreplace
bijvoorbeeld.
ignore
negeert de verkeerde decodeerfouten en maakt zo mogelijk de uitvoerreeks.
replace
vervangt de overeenkomstige tekens door de tekens zoals gedefinieerd in de gegeven encoding
methode. backslashreplace
vervangt de tekens die niet konden worden gedecodeerd met dezelfde inhoud als in het origineel bytes
.
>>> b'\x50\x51\xffed'.decode('utf-8', 'backslashreplace')
'PQ\\xffed'
>>> b'\x50\x51\xffed'.decode('utf-8', 'ignore')
'PQed'
>>> b'\x50\x51\xffed'.decode('utf-8', 'replace')
'PQ�ed'
MS-DOS- cp437
codering kan worden gebruikt als de codering van de bytes
gegevens onbekend is.
>>> b'\x50\x51\xffed'.decode('cp437')
'PQ\xa0ed'
chr
om de bytes naar string te converteren in Python 3.x
chr(i, /)
retourneert een Unicode-reeks van één teken met rangtelwoord. Het kan het element omzetten bytes
in een string
maar niet het complete bytes
.
We zouden lijstbegrip kunnen gebruiken of map
om de geconverteerde string te krijgen bytes
tijdens het gebruik van chr
voor een individueel element.
>>> A = b'\x50\x51\x52\x53'
>>> "".join([chr(_) for _ in A])
'PQRS'
>>> "".join(map(chr, A))
'PQRS'
Prestatievergelijking en conclusie van verschillende methoden voor het converteren van bytes naar tekenreeks
We gebruiken timeit
om de prestaties van de in deze tutorial geïntroduceerde methode te vergelijken - decode
en chr
.
>>> import timeit
>>> timeit.timeit('b"\x50\x51\x52\x53".decode()', number=1000000)
0.1356779
>>> timeit.timeit('"".join(map(chr, b"\x50\x51\x52\x53"))', number=1000000)
0.8295201999999975
>>> timeit.timeit('"".join([chr(_) for _ in b"\x50\x51\x52\x53"])', number=1000000)
0.9530071000000362
Je zou kunnen zien aan de tijd die hierboven decode()
wordt getoond, is veel sneller en chr()
is relatief inefficiënt omdat het de string uit het enkele string-karakter moet reconstrueren.
We adviseren het gebruik decode
in de prestatie-kritische toepassing.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedInGerelateerde Artikelen - Python Bytes
- Hoe bytes naar gehele getallen te converteren
- Hoe Int naar Bytes te converteren in Python 2 en Python 3
- Hoe String naar Bytes te converteren in Python
Gerelateerde Artikelen - Python String
- Hoe controleer je of een string leeg is op een pythonische manier
- Hoe witruimte in een string te verwijderen
- Hoe tekenreeks naar datetime te converteren
- Hoe tekenreeks naar kleine letters te converteren in Python 2 en 3
- Hoe te controleren of een string substring bevat in Python
- Een lijst converteren naar tekenreeks in Python