Salah satu urutan bawaan Python yang kurang dikenal adalah bytes, yaitu urutan integer yang tidak dapat diubah (immutable). Setiap integer mewakili satu byte data. Data sering dikirimkan melalui jaringan dan program sebagai bytes. Bytes tidak dapat dibaca manusia, dan kita sering perlu mengonversinya menjadi string dalam program Python kita.
Tutorial ini membahas teknik mengonversi bytes ke string di Python. Jika Anda tertarik dengan operasi kebalikannya, lihat tutorial saya tentang cara mengonversi string ke bytes di Python.
Mari mulai dengan jawaban singkat bagi Anda yang sedang terburu-buru.
Jawaban Singkat: Cara Mengonversi Bytes ke String di Python
Alat utama untuk mengonversi bytes ke string di Python adalah metode .decode():
data =b"\xc3\xa9clair"
text = data.decode(encoding="utf-8")print(text)Didukung oleh
Metode .decode() mengembalikan string yang merepresentasikan objek bytes. Pada contoh ini digunakan decoding UTF-8. UTF-8 adalah encoding default, jadi tidak wajib disebutkan pada contoh di atas, tetapi kita juga dapat menggunakan encoding lain.
Memahami Bytes dan String di Python
Python memiliki struktur data bawaan bytes, yaitu urutan integer yang tidak dapat diubah dalam rentang 0 hingga 255. Sebuah integer dalam rentang 256 angka ini dapat direpresentasikan menggunakan delapan bit data, yang setara dengan satu byte. Karena itu, setiap elemen dalam objek bytes adalah integer yang mewakili satu byte.
Mari gunakan konstruktor bytes() untuk membuat objek bytes dari sebuah list:
data =bytes([68,97,116,97,67,97,109,112])print(type(data))Didukung oleh
Traceback (most recent call last):
...
data[0] = 100
~~~~^^^
TypeError: 'bytes' object does not support item assignmentDidukung oleh
Python akan memunculkan TypeError ketika kita mencoba mengubah nilai dalam urutan ini. Mari konfirmasi bahwa objek bytes hanya dapat berisi integer dalam rentang 0 hingga 255:
Traceback (most recent call last):
...
data = bytes([254, 255, 256])
^^^^^^^^^^^^^^^^^^^^^^
ValueError: bytes must be in range(0, 256)Didukung oleh
ValueError menyatakan bahwa integer yang merepresentasikan sebuah byte harus merupakan anggota dari range(0, 256). Akhir rentang tidak disertakan, sesuai konvensi rentang angka di Python.
Kita dapat menampilkan objek bytes menggunakan print():
data =bytes([68,97,116,97,67,97,109,112])print(data)Didukung oleh
Representasi tersebut menampilkan objek bytes dalam bentuk karakter. Python menampilkan integer menggunakan karakter ASCII yang sesuai dengan nilai tersebut. Prefiks b di depan karakter dalam tanda kutip menunjukkan bahwa ini adalah objek bytes.
Kita juga dapat membuat objek bytes menggunakan literal bytes secara langsung:
data =b"DataCamp"print(data)print(data[0])Didukung oleh
Objek tersebut ditampilkan sebagai karakter, tetapi elemennya adalah integer.
Namun, objek bytes hanya dapat dibaca manusia jika menggunakan integer yang sesuai dengan karakter ASCII yang dapat dicetak. Karena ASCII adalah encoding 7-bit, ia memuat 128 kode, tetapi hanya 95 karakter ASCII yang dapat dicetak.
Integer antara 0 dan 127 yang tidak memiliki karakter ASCII yang dapat dicetak serta integer antara 128 dan 255 ditampilkan sebagai bilangan heksadesimal:
data =bytes([0,68,97,116,97,67,97,109,112,200])print(data)Didukung oleh
Integer pertama dalam list sekarang bernilai 0, yang bukan karakter yang dapat dicetak dalam ASCII. Objek bytes menampilkan integer ini sebagai \x00, representasi heksadesimal dari 0. Integer terakhir adalah 200, yang berada di luar rentang ASCII tetapi masih dalam rentang integer yang dapat digunakan dalam bytes. Python menampilkan integer ini sebagai \xc8, yaitu 200 dalam heksadesimal.
Struktur data bytes dan string memiliki kesamaan. Keduanya merupakan urutan yang tidak dapat diubah, tetapi bytes berisi integer, sedangkan string berisi karakter:
data =bytes([68,97,116,97,67,97,109,112])print(data[0])
text ="DataCamp"print(text[0])Didukung oleh
Bytes digunakan untuk mentransfer data melalui jaringan dan antarmuka yang berbeda. Bagian selanjutnya membahas cara mengonversi bytes ke string.
Mengonversi Bytes ke String: Metode .decode()
Objek bytes di Python hanya dapat dibaca manusia saat berisi karakter ASCII yang dapat dibaca. Dalam sebagian besar aplikasi, karakter-karakter ini tidak cukup. Kita dapat mengonversi objek bytes menjadi string menggunakan metode .decode():
data =bytes([68,97,116,97,67,97,109,112])
text = data.decode()print(text)print(type(text))Didukung oleh
Namun, ada berbagai encoding untuk konversi antara bytes dan string. Integer pada contoh di atas merepresentasikan karakter ASCII yang dapat dicetak. Akan tetapi, encoding default yang digunakan ketika tidak ada argumen yang diberikan ke .decode() adalah UTF-8, bukan ASCII. UTF-8 adalah encoding yang paling banyak digunakan untuk karakter Unicode.
128 kode UTF-8 pertama cocok dengan kode ASCII, itulah sebabnya objek bytes data didekodekan menjadi string "DataCamp" pada contoh di atas.
Namun, Unicode memuat hampir 150.000 karakter. UTF-8 mengenkode semua karakter non-ASCII di Unicode menggunakan dua byte atau lebih.
Mari buat objek bytes baru dan dekode:
data =bytes([195,169])print(data)
text = data.decode()print(text)Didukung oleh
Objek bytes tersebut berisi dua byte: integer 195 dan 169. Python menampilkan representasi heksadesimal dari byte-byte ini. Namun, .decode() mengembalikan sebuah string dengan mendekode objek bytes menggunakan encoding UTF-8. Sepasang byte b'\xc3\xa9' merepresentasikan huruf e dengan aksen akut, é.
Metode .decode() menerima argumen opsional untuk menentukan encoding:
UTF-8 adalah encoding default, tetapi encoding lain juga dapat digunakan. Kita juga dapat mengonversi string menjadi objek bytes menggunakan metode string .encode() dengan berbagai encoding:
text ="éclair"
data = text.encode("utf-8")print(data)
data = text.encode("utf-16")print(data)Didukung oleh
b'\xc3\xa9clair'
b'\xff\xfe\xe9\x00c\x00l\x00a\x00i\x00r\x00'Didukung oleh
String yang sama dikonversi menjadi objek bytes yang berbeda tergantung pada encoding karakter yang kita gunakan.
Kesalahan Encoding
Pilihan encoding karakter dapat menimbulkan kesalahan jika digunakan encoding yang berbeda saat konversi antara bytes dan string. Mari gunakan contoh dengan string "éclair" yang dienkode ke bytes menggunakan encoding UTF-8:
text ="éclair"
data = text.encode("utf-8")print(data)Didukung oleh
Urutan byte ini merepresentasikan karakter menggunakan encoding UTF-8. Metode .decode() akan memunculkan kesalahan jika kita menggunakan encoding yang salah:
Traceback (most recent call last):
...
text = data.decode("ascii")
^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)Didukung oleh
Namun, kita dapat menyertakan argumen opsional errors untuk menangani kesalahan apa pun. Nilai default parameter errors adalah "strict", yang akan memunculkan kesalahan untuk karakter yang tidak valid.
Metode .decode() dapat dipanggil dengan errors="ignore" untuk mengabaikan semua karakter tidak valid:
text = data.decode("ascii", errors="ignore")print(text)Didukung oleh
Keluaran ini menunjukkan bahwa ada karakter yang hilang dari string. Pilihan penanganan kesalahan bergantung pada aplikasi.
Mengonversi Bytes ke String Dengan str()
Metode .decode() adalah jalur utama untuk mengonversi bytes menjadi string. Namun, kita juga dapat menggunakan konstruktor str() secara langsung. Menggunakan konstruktor str() pada objek bytes akan membuat representasi string dari bytes mentah:
data =b'\xc3\xa9clair'
text =str(data)print(text)print(type(text))Didukung oleh
Mengonversi Bytes ke String Dengan codecs.decode()
Modul codecs di pustaka standar Python menyediakan antarmuka untuk encoding dan decoding data. Modul ini juga menyediakan fungsi .decode() yang dapat digunakan untuk mengonversi bytes Python menjadi string:
import codecs
data =b'\xc3\xa9clair'
text = codecs.decode(data, encoding='utf-8')print(text)Didukung oleh
Teknik konversi alternatif ini bukan merupakan metode dari tipe bytes, melainkan fungsi yang memerlukan objek bytes diteruskan sebagai argumen.
Kesimpulan
Data sering ditransfer sebagai bytes, dan banyak aplikasi Python perlu melakukan konversi antara bytes dan string. Objek bytes adalah urutan byte yang tidak dapat diubah yang dapat dikonversi menjadi string menggunakan salah satu dari beberapa encoding karakter.
Jalur utama untuk mengonversi bytes Python menjadi string adalah metode .decode(), yang memungkinkan pengguna memilih encoding dan strategi penanganan kesalahan.
Anda dapat melanjutkan pembelajaran Python dengan tutorial dan kursus berikut:
Saya belajar Fisika dan Matematika pada tingkat sarjana di University of Malta. Kemudian, saya pindah ke London dan meraih gelar PhD dalam bidang Fisika dari Imperial College. Saya meneliti teknik optik baru untuk memindai retina manusia. Sekarang, saya berfokus menulis tentang Python, berkomunikasi tentang Python, dan mengajar Python.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Salah satu urutan bawaan Python yang kurang dikenal adalah bytes, yaitu urutan integer yang tidak dapat diubah (immutable). Setiap integer mewakili satu byte data. Data sering dikirimkan melalui jaringan dan program sebagai bytes. Bytes tidak dapat dibaca manusia, dan kita sering perlu mengonversinya menjadi string dalam program Python kita.
Tutorial ini membahas teknik mengonversi bytes ke string di Python. Jika Anda tertarik dengan operasi kebalikannya, lihat tutorial saya tentang cara mengonversi string ke bytes di Python.
Mari mulai dengan jawaban singkat bagi Anda yang sedang terburu-buru.
Jawaban Singkat: Cara Mengonversi Bytes ke String di Python
Alat utama untuk mengonversi bytes ke string di Python adalah metode
.decode():Metode
.decode()mengembalikan string yang merepresentasikan objekbytes. Pada contoh ini digunakan decoding UTF-8. UTF-8 adalah encoding default, jadi tidak wajib disebutkan pada contoh di atas, tetapi kita juga dapat menggunakan encoding lain.Memahami Bytes dan String di Python
Python memiliki struktur data bawaan
bytes, yaitu urutan integer yang tidak dapat diubah dalam rentang 0 hingga 255. Sebuah integer dalam rentang 256 angka ini dapat direpresentasikan menggunakan delapan bit data, yang setara dengan satu byte. Karena itu, setiap elemen dalam objekbytesadalah integer yang mewakili satu byte.Mari gunakan konstruktor
bytes()untuk membuat objekbytesdari sebuah list:Urutan integer ini bersifat immutable:
Python akan memunculkan
TypeErrorketika kita mencoba mengubah nilai dalam urutan ini. Mari konfirmasi bahwa objekbyteshanya dapat berisi integer dalam rentang 0 hingga 255:ValueErrormenyatakan bahwa integer yang merepresentasikan sebuah byte harus merupakan anggota darirange(0, 256). Akhir rentang tidak disertakan, sesuai konvensi rentang angka di Python.Kita dapat menampilkan objek bytes menggunakan
print():Representasi tersebut menampilkan objek
bytesdalam bentuk karakter. Python menampilkan integer menggunakan karakter ASCII yang sesuai dengan nilai tersebut. Prefiks b di depan karakter dalam tanda kutip menunjukkan bahwa ini adalah objekbytes.Kita juga dapat membuat objek
bytesmenggunakan literal bytes secara langsung:Objek tersebut ditampilkan sebagai karakter, tetapi elemennya adalah integer.
Namun, objek
byteshanya dapat dibaca manusia jika menggunakan integer yang sesuai dengan karakter ASCII yang dapat dicetak. Karena ASCII adalah encoding 7-bit, ia memuat 128 kode, tetapi hanya 95 karakter ASCII yang dapat dicetak.Integer antara 0 dan 127 yang tidak memiliki karakter ASCII yang dapat dicetak serta integer antara 128 dan 255 ditampilkan sebagai bilangan heksadesimal:
Integer pertama dalam list sekarang bernilai 0, yang bukan karakter yang dapat dicetak dalam ASCII. Objek
bytesmenampilkan integer ini sebagai\x00, representasi heksadesimal dari 0. Integer terakhir adalah 200, yang berada di luar rentang ASCII tetapi masih dalam rentang integer yang dapat digunakan dalam bytes. Python menampilkan integer ini sebagai\xc8, yaitu 200 dalam heksadesimal.Struktur data
bytesdan string memiliki kesamaan. Keduanya merupakan urutan yang tidak dapat diubah, tetapibytesberisi integer, sedangkan string berisi karakter:Bytes digunakan untuk mentransfer data melalui jaringan dan antarmuka yang berbeda. Bagian selanjutnya membahas cara mengonversi bytes ke string.
Mengonversi Bytes ke String: Metode
.decode()Objek
bytesdi Python hanya dapat dibaca manusia saat berisi karakter ASCII yang dapat dibaca. Dalam sebagian besar aplikasi, karakter-karakter ini tidak cukup. Kita dapat mengonversi objekbytesmenjadi string menggunakan metode.decode():Namun, ada berbagai encoding untuk konversi antara bytes dan string. Integer pada contoh di atas merepresentasikan karakter ASCII yang dapat dicetak. Akan tetapi, encoding default yang digunakan ketika tidak ada argumen yang diberikan ke
.decode()adalah UTF-8, bukan ASCII. UTF-8 adalah encoding yang paling banyak digunakan untuk karakter Unicode.128 kode UTF-8 pertama cocok dengan kode ASCII, itulah sebabnya objek bytes data didekodekan menjadi string
"DataCamp"pada contoh di atas.Namun, Unicode memuat hampir 150.000 karakter. UTF-8 mengenkode semua karakter non-ASCII di Unicode menggunakan dua byte atau lebih.
Mari buat objek
bytesbaru dan dekode:Objek
bytestersebut berisi dua byte: integer 195 dan 169. Python menampilkan representasi heksadesimal dari byte-byte ini. Namun,.decode()mengembalikan sebuah string dengan mendekode objekbytesmenggunakan encoding UTF-8. Sepasang byteb'\xc3\xa9'merepresentasikan huruf e dengan aksen akut, é.Metode
.decode()menerima argumen opsional untuk menentukan encoding:UTF-8 adalah encoding default, tetapi encoding lain juga dapat digunakan. Kita juga dapat mengonversi string menjadi objek
bytesmenggunakan metode string.encode()dengan berbagai encoding:String yang sama dikonversi menjadi objek
bytesyang berbeda tergantung pada encoding karakter yang kita gunakan.Kesalahan Encoding
Pilihan encoding karakter dapat menimbulkan kesalahan jika digunakan encoding yang berbeda saat konversi antara bytes dan string. Mari gunakan contoh dengan string
"éclair"yang dienkode ke bytes menggunakan encoding UTF-8:Urutan byte ini merepresentasikan karakter menggunakan encoding UTF-8. Metode
.decode()akan memunculkan kesalahan jika kita menggunakan encoding yang salah:Namun, kita dapat menyertakan argumen opsional
errorsuntuk menangani kesalahan apa pun. Nilai default parametererrorsadalah"strict", yang akan memunculkan kesalahan untuk karakter yang tidak valid.Metode
.decode()dapat dipanggil denganerrors="ignore"untuk mengabaikan semua karakter tidak valid:Karakter pertama dalam string asli adalah é, yang bukan karakter ASCII. Oleh karena itu,
.decode()mengembalikan string tanpa karakter pertama.Opsi lain adalah memanggil
.decode()denganerrors="replace", yang mengganti byte tidak valid dengan �:Keluaran ini menunjukkan bahwa ada karakter yang hilang dari string. Pilihan penanganan kesalahan bergantung pada aplikasi.
Mengonversi Bytes ke String Dengan
str()Metode
.decode()adalah jalur utama untuk mengonversi bytes menjadi string. Namun, kita juga dapat menggunakan konstruktorstr()secara langsung. Menggunakan konstruktorstr()pada objekbytesakan membuat representasi string dari bytes mentah:Namun, konstruktor
str()juga menerima argumenencoding, yang dapat kita gunakan untuk membuat string berdasarkan encoding tertentu:Mengonversi Bytes ke String Dengan codecs.decode()
Modul
codecsdi pustaka standar Python menyediakan antarmuka untuk encoding dan decoding data. Modul ini juga menyediakan fungsi.decode()yang dapat digunakan untuk mengonversi bytes Python menjadi string:Teknik konversi alternatif ini bukan merupakan metode dari tipe
bytes, melainkan fungsi yang memerlukan objekbytesditeruskan sebagai argumen.Kesimpulan
Data sering ditransfer sebagai bytes, dan banyak aplikasi Python perlu melakukan konversi antara bytes dan string. Objek
bytesadalah urutan byte yang tidak dapat diubah yang dapat dikonversi menjadistringmenggunakan salah satu dari beberapa encoding karakter.Jalur utama untuk mengonversi bytes Python menjadi string adalah metode
.decode(), yang memungkinkan pengguna memilih encoding dan strategi penanganan kesalahan.Anda dapat melanjutkan pembelajaran Python dengan tutorial dan kursus berikut: