Representasi UTF-8 bit

4

Saya belajar tentang standar UTF-8 dan inilah yang saya pelajari:

Definition and bytes used
UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx 10xxxxxx                   2 bytes for 8 to 11 bits chars
1110xxxx 10xxxxxx 10xxxxxx          3 bytes for 12 to 16 bits chars
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4 bytes for 17 to 21 bits chars

Dan saya bertanya-tanya, mengapa 2 byte kode UTF-8 tidak 10xxxxxx sebaliknya, dengan demikian mendapatkan 1 bit hingga 22 bit dengan kode UTF-8 4 byte? Seperti sekarang, 64 nilai yang mungkin hilang (dari 1000000 untuk 10111111 ). Saya tidak mencoba memperdebatkan standar, tetapi saya bertanya-tanya mengapa demikian?

** EDIT **

Bahkan, kenapa tidak

UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx xxxxxxxx                   2 bytes for 8 to 13 bits chars
1110xxxx xxxxxxxx xxxxxxxx          3 bytes for 14 to 20 bits chars
11110xxx xxxxxxxx xxxxxxxx xxxxxxxx 4 bytes for 21 to 27 bits chars

...?

Terima kasih!

Yanick Rochon
sumber

Jawaban:

8

UTF-8 melakukan sinkronisasi sendiri. Sesuatu yang memeriksa byte dapat mengetahui apakah itu pada awal karakter UTF-8, atau sebagian melalui satu.

Katakanlah Anda memiliki dua karakter dalam skema Anda: 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Jika parser mengambil pada oktet kedua, ia tidak bisa mengatakan itu bukan untuk membaca oktet kedua dan ketiga sebagai satu karakter. Dengan UTF-8, parser dapat mengatakan bahwa ia berada di tengah karakter dan melanjutkan ke awal karakter berikutnya, sambil mengeluarkan status untuk menyebutkan simbol rusak.

Untuk edit: jika bit atas jelas, parser UTF-8 tahu bahwa mereka sedang melihat karakter yang diwakili dalam satu oktet. Jika diatur, ini adalah karakter multi-oktet.

Ini semua tentang pemulihan kesalahan dan klasifikasi oktet yang mudah.

Phil P
sumber
baik. masuk akal. Terima kasih.
Yanick Rochon