Ja som robil veľa čítania na unicodekódovania, najmä pokiaľ ide o Python. Myslím, že na to teraz veľmi dobre rozumiem, ale stále je tu malý detail, o ktorom som trochu neistý.
Ako dekódovanie pozná hranice bajtov? Povedzme napríklad, že mám unicode reťazec s dvoma znakmi unicode s bajtovými reprezentáciami xc6xb4
a xe2x98x82
, resp. Potom som tento reťazec unicode napísal do súboru, takže súbor teraz obsahuje bajty
xc6xb4xe2x98x82
, Teraz sa rozhodnem otvoriť a prečítať súbor (a Python predvolene dekóduje súbor ako utf-8), čo ma vedie k mojej hlavnej otázke.
Ako dekódovanie vie interpretovať bajty xc6xb4
a nie xc6xb4xe2
?
odpovede:
3 pre odpoveď č. 1Bajtové hranice sa dajú ľahko určiť z bitových vzorov. Vo vašom prípade, xc6
začína bity 1100
, a xe2
začína s 1110
, V utf-8 (a ja som si istý, že to nie je náhoda), môžete určiť počet bajtov v celej postave tým, že hľadáte iba na prvý byte a počítate počet 1
bitov na začiatku pred prvým 0
, Takže vaša prvá postava má 2 bajty a druhá má 3 bajty.
Ak začína bajt 0
, je to bežný znak ASCII.
Ak začína bajt 10
, je súčasťou sekvencie utf-8 (nie je to prvý znak).