Saya akan membayangkan alasannya cepat, array seperti akses ke karakter di indeks, tetapi beberapa karakter tidak akan masuk ke dalam 16 bit, jadi itu tidak akan berhasil ...
Jadi jika Anda harus menangani kasus khusus, mengapa tidak menggunakan UTF-8 saja?
Jawaban:
Karena dulunya adalah UCS-2 , yang merupakan 16-bit panjang tetap yang bagus. Tentu saja, 16bit ternyata tidak cukup. Mereka memasang UTF-16 di atas.
sumber
Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.
Pada saat rilis Java UTF-16 belum muncul, dan UTF-8 bukan bagian dari standar Unicode.Untuk bagian utama, demi pemeriksaan masa depan yang sederhana dan sederhana. Apakah itu alasan yang salah arah dan cara yang salah untuk melakukannya adalah pertanyaan yang berbeda.
Anda dapat melihat beberapa alasan di balik beberapa keputusan desain mereka dalam dokumen ini tentang peralihan 2004 ke Java 5 dan UTF-16, yang menjelaskan beberapa kekurangannya juga: Karakter Tambahan dalam Platform Java , dan lihat Mengapa ekosistem Jawa menggunakan pengkodean yang berbeda di seluruh tumpukan mereka? .
Untuk detail lebih lanjut tentang perangkap menggunakan UTF-16, dan mengapa UTF-8 cenderung menjadi pilihan yang lebih baik secara umum, lihat Haruskah UTF-16 dianggap berbahaya? dan manifesto Everywhere UTF-8 .
sumber
string
tipe "khusus" di Jawa (sepertiArray
ini), daripadaString
menjadi kelas "biasa" yang memiliki referensi ke array "biasa" yang berisi karakter aktual. Bergantung pada bagaimana string dihasilkan, UTF-8, UTF-16, atau bahkan UTF-32 mungkin merupakan cara paling efisien untuk menyimpannya. Saya tidak berpikir ada cara yang sangat efisien untuk kelas "biasa"String
untuk menangani banyak format, tetapi tipe "khusus" dengan dukungan JVM bisa.