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!'Didukung oleh
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))Didukung oleh
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)Didukung oleh
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))Didukung oleh
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))Didukung oleh
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)Didukung oleh
b'\xff\xfeH\x00e\x00l\x00l\x00o\x00 \x00P\x00y\x00t\x00h\x00o\x00n\x00!\x00'Didukung oleh
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)Didukung oleh
b'Caf\xc3\xa9 \xe2\x80\xa2 \xc2\xa32.20'Didukung oleh
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)Didukung oleh
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)Didukung oleh
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)Didukung oleh
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)Didukung oleh
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)Didukung oleh
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)Didukung oleh
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)Didukung oleh
b'Caf\\N{LATIN SMALL LETTER E WITH ACUTE} \\N{BULLET} \\N{POUND SIGN}2.20'Didukung oleh
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:
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.
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.
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():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
strdanbytes. Keduanya memiliki fitur umum tetapi juga perbedaan penting.Baik
strmaupunbytesadalah urutan yang immutable, artinya kita tidak dapat mengubah elemennya setelah dibuat. String adalah urutan karakter yang immutable, sedangkan objekbytesadalah urutan integer antara 0 dan 255 yang immutable. Rentang integer ini dapat direpresentasikan oleh 8 bit, yaitu satu byte. Oleh karena itu, objekbytesadalah 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
bytesdengan menambahkan b di depan tanda kutip tunggal, ganda, atau tiga yang biasanya kita gunakan untuk string:Meskipun kode menampilkan huruf pembentuk kata Python, setiap elemen dalam objek
bytesadalah integer antara 0 dan 255:Elemen pertama
word_as_bytesadalah integer80, yaitu kode ASCII untuk huruf kapital P:Saat mengubah
word_as_bytesmenjadi 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
bytesmenggunakan karakter non-ASCII. Kita perlu menggunakan konstruktorbytes():Objek
bytesmenampilkan tiga huruf pertama pada kata café secara langsung. Namun, huruf beraksen é bukan karakter ASCII, dan direpresentasikan oleh dua byte, yang ditampilkan sebagai\xc3dan\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:Objek
bytesdengan lima elemen merepresentasikan string empat huruf.Mengonversi String ke Bytes: Metode encode()
Sebelumnya, kita menggunakan konstruktor
bytes()untuk mengonversi string teks menjadi objekbytes. 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 objekbytesyang merepresentasikan string: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:Objek
bytesberbeda 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: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:Metode string
.encode()memiliki parametererrorsdengan nilai default"strict". Argumen "strict" memaksa.encode()memunculkanUnicodeEncodeErrorsaat ada karakter yang tidak dapat dienkode.Namun, ada opsi lain untuk menangani error. Salah satunya adalah mengabaikan error menggunakan argumen
"ignore":Opsi ini tidak memunculkan error. Sebagai gantinya,
.encode()mengembalikan objekbytes, 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":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:
Memanggil
.encode()denganerrors="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:Opsi lain adalah mengganti karakter tidak valid dengan nama resminya menggunakan
errors="namereplace":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:
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. Objekbytesadalah urutan integer, dan setiap integer merepresentasikan satu byte.Aplikasi memerlukan string untuk dikonversi menjadi objek
bytes, yang dapat kita lakukan menggunakan konstruktorbytes()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: