Teks dan kode / Panduan

Titik kode Unicode, byte UTF-8 dan normalisasi

Karakter yang terlihat, titik kode Unicode, dan byte penyimpanan saling berkaitan, tetapi ketiganya mengukur hal yang berbeda.

Tiga lapisan dari nilai teks

Pembaca melihat rangkaian karakter, terkadang termasuk tanda yang dikombinasikan dengan huruf sebelumnya. Unicode menetapkan titik kode untuk karakter abstrak, sementara encoding seperti UTF-8 mengubah titik kode tersebut menjadi byte untuk penyimpanan atau transmisi. Satu karakter yang terlihat dapat melibatkan lebih dari satu titik kode, dan satu titik kode dapat mengambil lebih dari satu UTF-8 byte. Menghitung byte oleh karena itu tidak perlu menghitung huruf atau karakter yang dipandang oleh pengguna. Alat teks-ke-kode-titik menunjukkan nilai Unicode dalam sebuah string; teks-ke-UTF-8-bytes menunjukkan lapisan yang berbeda. Gunakan tampilan ini untuk mendiagnosis ketidakcocokan, bukan sebagai ejaan alternatif yang dapat digantikan tanpa mempertimbangkan encoding s penerima.

Dua ejaan café

Kata yang terlihat café dapat berakhir dengan satu titik kode U+00E9, LATIN SMALL LETTER E WITH ACUTE. Ini adalah bentuk tersusun. Kata ini juga dapat diakhiri dengan U+0065, LATIN SMALL LETTER E, diikuti oleh U+0301, COMBINING ACUTE ACCENT. Yang terakhir memiliki satu titik kode tambahan meskipun kata yang dihasilkan sering terlihat sama. Dalam UTF-8 kata yang disusun memiliki byte heksadesimal 63 61 66 C3 A9; kata yang terurai memiliki 63 61 66 65 CC 81. Mereka tidak adalah urutan byte yang sama, sehingga perbandingan byte-by-byte atau hash dapat berbeda. NFC memetakan contoh ini ke urutan komposit, sementara NFD memetakan ke urutan yang terdekomposer. Konverter tertanam menampilkan byte-byte ini dalam desimal: 99 97 102 195 169 untuk ejaan tersusun dan 99 97 102 101 204 129 untuk ejaan terpecah. Bandingkan nilai-nilai ini dengan notasi heksadesimal di atas.

Satu kata yang terlihat dapat memiliki dua urutan Unicode dan dua urutan byte.
  1. café: U+00E9 → C3 A9 di akhir
  2. café: U+0065 U+0301 → 65 CC 81 di akhir
  3. NFC ⇢ tersusun · NFD ⇢ terpecah

Apa yang normalisasi lakukan dan tidak lakukan

Normalisasi Unicode menyediakan cara yang didefinisikan untuk memilih representasi untuk urutan yang setara secara kanonis. NFC menggunakan komposisi kanonik setelah dekomposisi, sementara NFD meninggalkan urutan dekomposisi kanonik. Ini berguna sebelum membandingkan teks yang berasal dari papan ketik, file atau sistem yang berbeda. Ini tidak menerjemahkan kata-kata, menghilangkan aksen atau menjamin bahwa semua string yang mirip secara visual sama. Beberapa karakter yang mirip berasal dari naskah yang berbeda atau memiliki makna yang berbeda. Bentuk kompatibilitas NFKC dan NFKD membuat perubahan yang lebih luas dan dapat menghapus perbedaan format, sehingga pilih mereka hanya untuk tujuan yang memungkinkan perubahan tersebut. Jaga kebijakan normalisasi yang sama pada setiap titik di mana nilai-nilai dibandingkan, diindeks atau dihash; jika tidak, input yang sepadan secara visual masih dapat mengambil jalur yang berbeda.

Sebuah urutan debug yang dapat diandalkan

Ketika nama tidak cocok, simpan masukan asli terlebih dahulu. Periksa titik-titik kodenya untuk melihat apakah sebuah aksen adalah satu karakter yang sudah disusun atau huruf dasar plus tanda kombinasi. Periksa UTF-8 byte untuk memeriksa encoding yang akan benar-benar bepergian melalui API atau ditulis ke file. Normalisasi salinan ke NFC atau NFD dan bandingkan titik kode yang dihasilkan, lalu coba konversi UTF-8-byte terbalik untuk memastikan byte yang tepat adalah valid dan dekoding seperti yang diharapkan. Untuk pertukaran berkas, rekam encoding yang dipilih secara eksplisit daripada mengasumsikan setiap aplikasi menggunakan default yang sama. Karakter yang rusak atau pengganti biasanya menunjukkan masalah dekoding; normalisasi string yang sudah salah dekoding tidak akan mengembalikan byte asli yang hilang.

Gunakan tes kesetaraan yang benar

Untuk integritas file yang tepat, hash dan tanda tangan, byte adalah keputusan: mengubah normalisasi mengubah byte dan oleh karena itu digest. Untuk pencarian yang berhadapan dengan pengguna atau deteksi duplikat, sebuah produk dapat secara sengaja normalisasi pertama, tetapi harus menjelaskan dan menguji aturan itu. Perbedaan kasus, tanda baca, ruang kosong dan kolasi bahasa-spesifik adalah pertanyaan yang terpisah; NFC sendiri tidak menyelesaikan mereka. Jangan mengubah ejaan s pengguna secara diam-diam saat menampilkan atau mengekspornya kecuali aliran kerja memintanya. Dalam alat di bawah ini, mulai dengan café, periksa byte UTF-8, lalu tempelkan versi yang ditipkan dengan e plus aksen kombinasi ke dalam kode-titik dan alat normalisasi. Perbandingan menunjukkan persis di mana perbedaan visual kecil masuk ke pipa data.

Coba konverter

Periksa UTF-8 byte cafe, lalu cobalah e terpecah plus kombinasi aksen.

UTF-8 serialisasi teks Unicode menjadi byte; ASCII menggunakan satu byte, sementara banyak karakter lain menggunakan dua sampai empat byte. Konversi secara lokal di peramban Anda.

Buka konverter lengkap

Panduan lainnya

Panduan konversi

Jelajahi panduan