Karel Bílek
Karel Bílek

Reputation: 37658

How to convert bytearray with non-ASCII bytes to string in python?

I don't know how to convert Python's bitarray to string if it contains non-ASCII bytes. Example:

>>> string='\x9f'
>>> array=bytearray(string)
>>> array
bytearray(b'\x9f')
>>> array.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 0: ordinal not in range(128)

In my example, I just want to somehow get a string '\x9f' back from the bytearray. Is that possible?

Upvotes: 7

Views: 49615

Answers (4)

Swaleh Matongwa
Swaleh Matongwa

Reputation: 886

use bytes(array, encoding='utf8')

Upvotes: 0

Tim Poffenbarger
Tim Poffenbarger

Reputation: 51

I'd like to mention the binascii library that comes with Python.

My use case: I was querying a database that had a binary field being used as a key within the DB. I wanted to pull that binary field and treat it as a key elsewhere. I thought converting it to a string was the best use-case.

binascii offered me a better alternative:

import binascii binary_field = bytearray(b'\x92...') binascii.hexlify(binary_field)

Upvotes: 5

suryakrupa
suryakrupa

Reputation: 4112

Did you try

byteVariable.decode('utf-8')

Upvotes: 9

Martijn Pieters
Martijn Pieters

Reputation: 1122532

In Python 2, just pass it to str():

>>> import sys; sys.version_info
sys.version_info(major=2, minor=7, micro=8, releaselevel='final', serial=0)
>>> string='\x9f'
>>> array=bytearray(string)
>>> array
bytearray(b'\x9f')
>>> str(array)
'\x9f'

In Python 3, you'd want to convert it back to a bytes object:

>>> bytes(array)
b'\x9f'

Upvotes: 13

Related Questions