Di Jawa, saya memiliki sebuah String dan saya ingin menyandikannya sebagai byte array (dalam UTF8, atau beberapa pengkodean lainnya). Bergantian, saya memiliki array byte (dalam beberapa pengkodean dikenal) dan saya ingin mengubahnya menjadi String Java. Bagaimana saya melakukan konversi ini?
java
string
encoding
character-encoding
mcherm
sumber
sumber
Inilah solusi yang menghindari melakukan pencarian Charset untuk setiap konversi:
sumber
StandardCharsets.UTF_8
cara konstan untuk mengakses rangkaian karakter UTF-8.sumber
Anda dapat mengonversi secara langsung melalui konstruktor String (byte [], String) dan getBytes (String). Java memperlihatkan set karakter yang tersedia melalui kelas Charset . Dokumentasi JDK berisi daftar penyandian yang didukung .
90% dari waktu, konversi tersebut dilakukan pada aliran, sehingga Anda akan menggunakan kelas Reader / Writer . Anda tidak akan secara bertahap mendekode menggunakan metode String pada stream byte acak - Anda akan membiarkan diri Anda terbuka untuk bug yang melibatkan karakter multibyte.
sumber
UTF-8
, apa kekhawatiran tentang karakter multibytes?Implementasi tomcat7 saya menerima string sebagai ISO-8859-1; meskipun jenis konten permintaan HTTP. Solusi berikut ini berfungsi untuk saya ketika mencoba menafsirkan karakter seperti 'é' dengan benar.
Ketika mencoba menafsirkan string sebagai US-ASCII, info byte tidak diartikan dengan benar.
sumber
StandardCharSets.UTF_8
danStandardCharSets.ISO_8859_1
.Sebagai alternatif, StringUtils dari Apache Commons dapat digunakan.
atau
Jika Anda memiliki charset non-standar, Anda dapat menggunakan getBytesUnchecked () atau newString () .
sumber
Untuk mendekode serangkaian byte ke pesan string normal, akhirnya saya berhasil menggunakan pengkodean UTF-8 dengan kode ini:
sumber
Jika Anda menggunakan 7-bit ASCII atau ISO-8859-1 (format yang luar biasa umum) maka Anda tidak perlu membuat java.lang.String sama sekali. Jauh lebih performant untuk memasukkan byte ke char:
Contoh kerja penuh:
Jika Anda tidak menggunakan karakter diperluas seperti Ä, Æ, Å, Ç, Ï, Ê dan dapat dipastikan bahwa nilai yang ditransmisikan hanya dari 128 karakter Unicode pertama, maka kode ini juga akan berfungsi untuk UTF-8 dan ASCII yang diperluas (seperti cp-1252).
sumber
Saya tidak dapat berkomentar tetapi tidak ingin memulai utas baru. Tapi ini tidak berhasil. Perjalanan pulang-pergi sederhana:
Saya perlu b [] array yang sama sebelum dan sesudah pengkodean yang bukan (rujukan ini untuk jawaban pertama).
sumber
sumber
sumber
sumber
sangat terlambat tetapi saya baru saja mengalami masalah ini dan ini adalah perbaikan saya:
sumber