Saya mencoba menggunakan konstanta alih-alih string literal dalam potongan kode ini:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
muncul dalam kode agak sering, dan akan jauh lebih baik untuk merujuk ke beberapa static final
variabel saja. Apakah Anda tahu di mana saya dapat menemukan variabel seperti itu di JDK?
BTW, jika dipikir-pikir, konstanta seperti itu adalah desain yang buruk: Literatur Statis Publik ... Bukan Solusi untuk Duplikasi Data
Files.newBufferedWriter(Path path, Charset cs)
dari NIO.Jawaban:
Di Java 1.7+, java.nio.charset.StandardCharsets mendefinisikan konstanta untuk
Charset
menyertakanUTF_8
.Untuk Android: minSdk 19
sumber
.toString()
akan bekerja tetapi fungsi yang tepat adalah.name()
. 99,9% toString bukan jawabannya..displayName()
juga akan berfungsi kecuali diganti untuk lokalisasi sebagaimana dimaksud.name()
sama sekali. Anda dapat langsung mengirimkanCharset
objek keInputStreamReader
konstruktor.String
, mungkin karena alasan warisan. Dalam kasus seperti itu, saya menyimpanCharset
objek di sekitar, biasanya berasal dariStandardCharsets
, dan digunakanname()
jika diperlukan.Sekarang saya menggunakan
org.apache.commons.lang3.CharEncoding.UTF_8
konstanta dari commons-lang .sumber
org.apache.commons.lang3.CharEncoding.UTF_8
. (Catatan "lang3").The Google Jambu perpustakaan (yang saya akan sangat menyarankan pula, jika Anda melakukan pekerjaan di Jawa) memiliki
Charsets
kelas dengan bidang statis sepertiCharsets.UTF_8
,Charsets.UTF_16
, dllKarena Java 7, Anda hanya harus menggunakan
java.nio.charset.StandardCharsets
konstanta yang sebanding.Perhatikan bahwa konstanta ini bukan string, mereka adalah
Charset
contoh aktual . Semua API standar yang menggunakan nama karakter juga memiliki kelebihan yang mengambilCharset
objek yang harus Anda gunakan sebagai gantinya.sumber
java.nio.charset.StandardCharsets
bila memungkinkan, yang bukan kode pihak ketiga. Selain itu, definisi Guava Charsets tidak "terus dimodifikasi" dan AFAIK tidak pernah merusak kompatibilitas, jadi saya rasa kritik Anda tidak diperlukan.Charsets
kelas. Jika Anda ingin mengeluh tentang Jambu Biji, itu baik-baik saja, tetapi ini bukan tempat untuk keluhan itu.Jika halaman ini muncul di pencarian web seseorang, pada Java 1.7 Anda sekarang dapat menggunakan java.nio.charset.StandardCharsets untuk mendapatkan akses ke definisi konstan standar charset.
sumber
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Konstan ini tersedia (antara lain sebagai:
UTF-16
,US-ASCII
, dll) di kelasorg.apache.commons.codec.CharEncoding
juga.sumber
Tidak ada (setidaknya di perpustakaan Java standar). Set karakter bervariasi dari platform ke platform sehingga tidak ada daftar standar di Jawa.
Ada beberapa perpustakaan pihak ke-3 yang mengandung konstanta ini. Salah satunya adalah Guava (perpustakaan inti Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
sumber
StandardCharsets
dijamin ada di setiap implementasi Java pada setiap platform.Anda dapat menggunakan
Charset.defaultCharset()
API ataufile.encoding
properti.Tetapi jika Anda ingin konstanta Anda sendiri, Anda harus mendefinisikannya sendiri.
sumber
Di Jawa 1.7+
Jangan gunakan string "UTF-8", sebagai gantinya gunakan
Charset
parameter tipe:sumber
Jika Anda menggunakan OkHttp untuk Java / Android Anda dapat menggunakan konstanta berikut:
sumber
Charset.forName("UTF-8").name()
ketika Anda membutuhkan dukungan untuk Android yang lebih rendah dari API 19+ jika tidak, Anda dapat menggunakan:StandardCharsets.UTF_8.name()
Definisi konstan untuk standar. Charset ini dijamin akan tersedia di setiap implementasi platform Java. sejak 1.7
sumber
Kelas
org.apache.commons.lang3.CharEncoding.UTF_8
tidak digunakan lagi setelah Java 7 diperkenalkanjava.nio.charset.StandardCharsets
sumber