Encode String ke UTF-8 di Java

1. Ikhtisar

Saat berhadapan dengan String di Java, terkadang kita perlu menyandikannya ke charset tertentu.

Tutorial ini adalah panduan praktis yang menunjukkan berbagai cara untuk menyandikan String ke charset UTF-8 ; untuk pendalaman yang lebih teknis, lihat Panduan kami untuk Pengkodean Karakter.

2. Mendefinisikan Masalah

Untuk memamerkan pengkodean Java, kita akan bekerja dengan String Jerman “Entwickeln Sie mit Vergnügen”.

String germanString = "Entwickeln Sie mit Vergnügen"; byte[] germanBytes = germanString.getBytes(); String asciiEncodedString = new String(germanBytes, StandardCharsets.US_ASCII); assertNotEquals(asciiEncodedString, germanString);

Ini String dikodekan menggunakan US_ASCII memberi kita nilai “Entwickeln Sie mit Vergn? Gen” saat dicetak, karena tidak memahami non-ASCII karakter ü . Tapi ketika kita mengonversi String yang dikodekan ASCII yang menggunakan semua karakter bahasa Inggris menjadi UTF-8, kita mendapatkan string yang sama.

String englishString = "Develop with pleasure"; byte[] englishBytes = englishString.getBytes(); String asciiEncondedEnglishString = new String(englishBytes, StandardCharsets.US_ASCII); assertEquals(asciiEncondedEnglishString, englishString);

Mari kita lihat apa yang terjadi ketika kita menggunakan pengkodean UTF-8.

3. Encoding Dengan Core Java

Mari kita mulai dengan pustaka inti.

String tidak dapat diubah di Java, yang berarti kita tidak dapat mengubah pengkodean karakter String . Untuk mencapai apa yang kita inginkan, kita perlu menyalin byte dari String dan kemudian membuat yang baru dengan pengkodean yang diinginkan .

Pertama, kita mendapatkan byte String dan, setelah itu, buat yang baru menggunakan byte yang diambil dan charset yang diinginkan:

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8); String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8); assertEquals(rawString, utf8EncodedString);

4. Pengkodean Dengan Java 7 StandardCharsets

Alternatifnya, kita bisa menggunakan kelas StandardCharsets yang diperkenalkan di Java 7 untuk menyandikan String .

Pertama, kita akan mendekode String menjadi byte dan, kedua, mengenkode String ke UTF-8:

String rawString = "Entwickeln Sie mit Vergnügen"; ByteBuffer buffer = StandardCharsets.UTF_8.encode(rawString); String utf8EncodedString = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(rawString, utf8EncodedString);

5. Pengkodean Dengan Commons-Codec

Selain menggunakan inti Java, sebagai alternatif kita dapat menggunakan Apache Commons Codec untuk mencapai hasil yang sama.

Apache Commons Codec adalah paket praktis yang berisi encoder dan decoder sederhana untuk berbagai format.

Pertama, mari kita mulai dengan konfigurasi proyek. Saat menggunakan Maven, kita harus menambahkan dependensi commons-codec ke pom.xml kita :

 commons-codec commons-codec 1.14 

Kemudian, dalam kasus kami, kelas yang paling menarik adalah StringUtils , yang menyediakan metode untuk menyandikan String s. Menggunakan kelas ini, mendapatkan String berenkode UTF-8 cukup mudah:

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = StringUtils.getBytesUtf8(rawString); String utf8EncodedString = StringUtils.newStringUtf8(bytes); assertEquals(rawString, utf8EncodedString);

6. Kesimpulan

Mengenkode String ke UTF-8 tidaklah sulit, tetapi tidak begitu intuitif. Tutorial ini menyajikan tiga cara untuk melakukannya, baik menggunakan Java inti atau menggunakan Codec Apache Commons.

Seperti biasa, contoh kode dapat ditemukan di GitHub.