Lewati ke konten utama

Cara Mengonversi String ke Bytes di Python

Di Python, gunakan metode .encode() pada string untuk mengonversinya menjadi bytes, dengan opsi menentukan encoding yang diinginkan (default UTF-8).
· 7 mnt Baca

Jelajahi bersama AI

String merepresentasikan teks yang dapat dibaca manusia dan merupakan salah satu tipe data paling dasar dan penting dalam pemrograman komputer. Namun, setiap karakter dalam string teks direpresentasikan oleh satu atau lebih byte data biner. Aplikasi seperti operasi input dan output serta transmisi data memerlukan string untuk dikonversi menjadi bytes menggunakan encoding tertentu.

Tutorial ini membahas teknik mengonversi string ke bytes di Python. Jika Anda tertarik dengan operasi sebaliknya, lihat tutorial saya tentang cara mengonversi bytes ke string di Python.

Sebelum masuk ke detail, mari mulai dengan jawaban singkat bagi Anda yang sedang terburu-buru.

Jawaban Singkat: Cara Mengonversi String ke Bytes di Python

Python memudahkan konversi string menjadi bytes menggunakan metode bawaan .encode():

my_string = "Hello, world!"
bytes_representation = my_string.encode(encoding="utf-8")  
# Optional: Specify the desired encoding (UTF-8 is the default)

print(bytes_representation)
# Output: b'Hello, world!'

Metode .encode() mengembalikan objek bytes baru yang merepresentasikan versi terenkode dari string asli. Secara default, ia menggunakan encoding UTF-8, tetapi Anda dapat menentukan encoding lain seperti 'ascii' atau 'latin-1' jika diperlukan.

Mari kita bahas proses konversi ini lebih detail.

Memahami String dan Bytes di Python

Dua tipe data bawaan inti di Python adalah str dan bytes. Keduanya memiliki fitur umum tetapi juga perbedaan penting.

Baik str maupun bytes adalah urutan yang immutable, artinya kita tidak dapat mengubah elemennya setelah dibuat. String adalah urutan karakter yang immutable, sedangkan objek bytes adalah urutan integer antara 0 dan 255 yang immutable. Rentang integer ini dapat direpresentasikan oleh 8 bit, yaitu satu byte. Oleh karena itu, objek bytes adalah urutan byte.

Pengodean karakter ASCII

Mari pertimbangkan karakter ASCII terlebih dahulu. ASCII (American Standard Code for Information Interchange) adalah pengodean karakter yang hanya berisi 128 karakter. Karena itu, setiap karakter ASCII dapat direpresentasikan oleh tujuh bit, yang lebih sedikit daripada satu byte.

Kita dapat membuat objek bytes dengan menambahkan b di depan tanda kutip tunggal, ganda, atau tiga yang biasanya kita gunakan untuk string:

word_as_bytes = b"Python"
print(word_as_bytes)
print(type(word_as_bytes))
b'Python'
<class 'bytes'>

Meskipun kode menampilkan huruf pembentuk kata Python, setiap elemen dalam objek bytes adalah integer antara 0 dan 255:

print(word_as_bytes[0])
print(list(word_as_bytes))
80
[80, 121, 116, 104, 111, 110]

Elemen pertama word_as_bytes adalah integer 80, yaitu kode ASCII untuk huruf kapital P:

print(chr(80))
P

Saat mengubah word_as_bytes menjadi list, list tersebut berisi integer yang merepresentasikan setiap byte. Integer tersebut adalah kode ASCII untuk huruf-huruf dalam kata Python.

Namun, himpunan karakter ASCII terbatas.

Pengodean karakter UTF-8

Pengodean karakter yang paling umum adalah UTF-8, yang merupakan pengodean Unicode 8-bit. 128 karakter ASCII diwakili oleh integer yang sama dalam UTF-8, tetapi karakter lain juga dapat direpresentasikan menggunakan dua atau lebih byte untuk setiap karakter.

Mari buat objek bytes menggunakan karakter non-ASCII. Kita perlu menggunakan konstruktor bytes():

word_as_bytes = bytes("café", "utf-8")
print(word_as_bytes)
b'caf\xc3\xa9'

Objek bytes menampilkan tiga huruf pertama pada kata café secara langsung. Namun, huruf beraksen é bukan karakter ASCII, dan direpresentasikan oleh dua byte, yang ditampilkan sebagai \xc3 dan \xa9. Byte ini merepresentasikan angka heksadesimal c3 dan a9, yang masing-masing adalah integer 195 dan 169. Dua byte ini bila digabungkan merepresentasikan é dalam UTF-8:

print(len(word_as_bytes))
print(list(word_as_bytes))
5
[99, 97, 102, 195, 169]

Objek bytes dengan lima elemen merepresentasikan string empat huruf.

Mengonversi String ke Bytes: Metode encode()

Sebelumnya, kita menggunakan konstruktor bytes() untuk mengonversi string teks menjadi objek bytes. Cara yang lebih umum untuk mengonversi string Python ke bytes adalah menggunakan metode string .encode(), yang memberi kendali atas encoding dan penanganan error. Metode ini mengembalikan objek bytes yang merepresentasikan string:

word_as_bytes = "Hello Python!".encode()
​print(word_as_bytes)
print(type(word_as_bytes))
b'Hello Python!'
<class 'bytes'>

Metode .encode() secara default menggunakan encoding UTF-8. UTF-8 adalah format encoding yang paling luas digunakan, dan mendukung rentang karakter yang jauh lebih luas daripada ASCII. UTF-8 merepresentasikan setiap karakter dengan urutan unit satu, dua, tiga, atau empat byte.

Kita dapat memanggil .encode() dengan encoding alternatif sebagai argumen:

word_as_bytes = "Hello Python!".encode("utf-16")
print(word_as_bytes)
b'\xff\xfeH\x00e\x00l\x00l\x00o\x00 \x00P\x00y\x00t\x00h\x00o\x00n\x00!\x00'

Objek bytes berbeda pada kasus ini karena merepresentasikan encoding UTF-16 dari string teks yang sama.

Kesalahan Encoding

Karena tidak semua encoding mencakup semua karakter, kesalahan dapat terjadi saat mengenkode string menjadi objek bytes.

Mari pertimbangkan string "Café • £2.20", yang memiliki tiga karakter non-ASCII. Kita dapat mengenkodenya menggunakan encoding default UTF-8:

word_as_bytes = "Café • £2.20".encode()
print(word_as_bytes)
b'Caf\xc3\xa9 \xe2\x80\xa2 \xc2\xa32.20'

Karakter non-ASCII diganti dengan urutan escape heksadesimalnya. Namun, .encode() akan memunculkan error jika string yang sama dienkode menggunakan ASCII karena beberapa karakter tidak ada dalam encoding ASCII:

word_as_bytes = "Café • £2.20".encode("ascii")
print(word_as_bytes)
Traceback (most recent call last):
...
word_as_bytes = "Café • £2.20".encode("ascii")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 3: ordinal not in range(128)

Metode string .encode() memiliki parameter errors dengan nilai default "strict". Argumen "strict" memaksa .encode() memunculkan UnicodeEncodeError saat ada karakter yang tidak dapat dienkode.

Namun, ada opsi lain untuk menangani error. Salah satunya adalah mengabaikan error menggunakan argumen "ignore":

word_as_bytes = "Café • £2.20".encode("ascii", errors="ignore")
print(word_as_bytes)
b'Caf 2.20'

Opsi ini tidak memunculkan error. Sebagai gantinya, .encode() mengembalikan objek bytes, dan huruf beraksen é, tanda bullet, serta simbol pound dihilangkan.

Opsi lain adalah mengganti karakter yang tidak dapat dienkode dengan sesuatu yang lain. Ada beberapa opsi penggantian. Salah satunya adalah argumen errors="replace":

word_as_bytes = "Café • £2.20".encode("ascii", errors="replace")
print(word_as_bytes)
b'Caf? ? ?2.20'

Tiga karakter non-ASCII, yang tidak dapat dienkode pada contoh ini, diganti dengan tanda tanya. Jadi, setiap karakter yang hilang diganti dengan karakter tunggal lain sebagai placeholder.

Kita juga dapat mengganti karakter yang hilang dengan teks yang lebih informatif:

word_as_bytes = "Café • £2.20".encode("ascii", errors="backslashreplace")
print(word_as_bytes)
b'Caf\\xe9 \\u2022 \\xa32.20'

Memanggil .encode() dengan errors="backslashreplace" mengganti karakter yang tidak dapat dienkode dengan urutan escape heksadesimalnya. Angka heksadesimal e9 merepresentasikan huruf beraksen é. Tanda bullet adalah karakter Unicode u2022, dan angka heksadesimal a3 merepresentasikan simbol pound.

Kita juga dapat menggunakan "xmlcharrefreplace" untuk mengganti karakter yang hilang dengan kode XML-nya:

word_as_bytes = "Café • £2.20".encode("ascii", errors="xmlcharrefreplace")
print(word_as_bytes)
b'Caf&#233; &#8226; &#163;2.20'

Opsi lain adalah mengganti karakter tidak valid dengan nama resminya menggunakan errors="namereplace":

word_as_bytes = "Café • £2.20".encode("ascii", errors="namereplace")
print(word_as_bytes)
b'Caf\\N{LATIN SMALL LETTER E WITH ACUTE} \\N{BULLET} \\N{POUND SIGN}2.20'

Berbagai situasi mungkin memerlukan penanganan error yang disesuaikan, dan metode string .encode() menyediakan beberapa opsi untuk menangani karakter yang tidak dapat dienkode.

Aplikasi Konversi String ke Byte dalam Data Science

Konversi string ke byte adalah operasi fundamental yang digunakan dalam berbagai domain data science:

  • Natural language processing (NLP): Saat bekerja dengan data teks untuk tugas seperti analisis sentimen, pemodelan topik, atau penerjemahan mesin, kita sering melakukan prapemrosesan teks dengan memecahnya menjadi token kata atau sub-kata. Proses tokenisasi ini sering kali melibatkan konversi string ke urutan byte untuk representasi dan manipulasi yang efisien.
  • Pembersihan dan prapemrosesan data: Operasi pada tingkat byte dapat berguna untuk membersihkan data teks, seperti menghapus karakter tidak valid atau menormalkan teks berdasarkan pola byte tertentu.
  • Rekayasa fitur: Dalam beberapa kasus, fitur tingkat byte (misalnya n-gram byte) dapat diekstraksi dari data teks dan digunakan sebagai fitur masukan untuk model pembelajaran mesin.
  • Web scraping dan ekstraksi data: Saat men-scrape data dari situs web, kita sering menerima HTML atau konten berbasis teks lainnya yang mungkin perlu diurai dan diproses pada tingkat byte untuk mengekstrak informasi yang relevan.
  • Kompresi data: Beberapa algoritma kompresi data beroperasi pada urutan byte, sehingga mengonversi string ke bytes bisa menjadi langkah yang diperlukan sebelum menerapkan teknik kompresi.

Memahami aplikasi-aplikasi ini dapat membantu kita mengidentifikasi situasi ketika mengonversi string ke bytes akan berguna.

Kesimpulan

String adalah urutan karakter yang dapat dibaca manusia. Karakter-karakter ini dienkode sebagai byte data biner, yang dapat disimpan dalam objek bytes. Objek bytes adalah urutan integer, dan setiap integer merepresentasikan satu byte.

Aplikasi memerlukan string untuk dikonversi menjadi objek bytes, yang dapat kita lakukan menggunakan konstruktor bytes() atau metode string .encode(). Menguasai konversi antara string dan bytes memungkinkan manipulasi data yang lebih fleksibel.

Anda dapat melanjutkan pembelajaran Python dengan tutorial dan kursus berikut:

FAQ Konversi String ke Bytes

Apa perbedaan antara str dan bytes?

String adalah urutan karakter yang immutable, sedangkan objek bytes adalah urutan integer yang immutable. Setiap integer merepresentasikan satu byte.

Haruskah saya menggunakan bytes() atau str.encode() untuk mengonversi string ke bytes?

Metode str.encode() adalah cara yang disarankan untuk mengonversi string ke bytes di Python, karena jelas dan fleksibel dalam memilih encoding serta strategi penanganan error. Konstruktor bytes() dapat digunakan pada skenario khusus ketika str.encode() tidak dapat diterapkan langsung.

Stephen Gruppetta

Penulis

Stephen Gruppetta

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.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai