A bájtok számát kell ahhoz, hogy utf8 karakter a char sor verem túlcsordulás az orosz

Iterációs szerint UTF8 húr elvitt, hogy kitaláljuk, hogyan kell tanulni az első bájt a karakter a bájtok számát. Én csak most kezdik kezelni UTF8, így nem egészen biztos, hogy értem a mechanika bites műveletek során, ami erre a célra használt (a legtöbb példa az interneten).







A StackOverflow találtam két megoldás van:

2) A második oldatot itt található. ez használ egy másik módszer: ahelyett, hogy kicsit működés használt „lookup” a következő tömb 256 karaktert:

Sajnos, én nem most lehetősége van arra, hogy alaposan foglalkozni UTF8, így csak keres egy megbízható funkció, amely megadja nekem a jobb eredmények karakter kódolva UTF8 (pontosabban az első bájt a karakter). Én inkább a második megoldás, de szeretném hallani a véleményét tapasztaltabb szakemberek számára:

milyen funkciót kell használni az ilyen feladatokat: 1, 2, vagy talán tudja, néhány bevált funkcióját, ami jobb, mint ez a két?

Ui By the way, ha valaki meg tudja magyarázni, hol az indextábla, hálás lesz. Az SO írja, hogy ki kell venni a forráskódot bőbeszédű a gutf8.c. Szóval vajon mi az az elv alapul.

Azt tanácsolom, hogy ne zavarja a UTF-8 egyáltalán. Tegye az alábbiak szerint: 1. A fájl tartalmaz olyan adatokat UTF-8 (vagy más kódolás). Olvasása közben egyszerre azok átkódolniuk egy UCS-2 (wchar_t *), vagy ha kell UCS-4 a hossza az egyes karakter ugyanaz. 2. Csak az információs szimbólumok állandó bájt hosszúságú. 3. írásakor egy fájlt újra kódolni vissza utf-8 kódolású, vagy mi van szükség. - VladD február 24 '14 at 13:12

@VladD, kösz a tanácsot. Mégis, szeretném, hogy ez egy kicsit trükkös UTF-8, hogy milyen az iteráció szerint (A-Za-Za-Ha-I) on the fly, átalakítás nélkül kódolást. - Stanislav Pankevich február 24 '14 at 13:27







Röviden karakter UTF8 kódolás algoritmusa a következő:

  1. Ha a karakter kód kevesebb, mint 128, kódolva van, ahogy van.
  2. Ha nagyobb vagy egyenlő, akkor kódolt ebben a formátumban: az első bájt van írva, a felhasznált bájtok beleértve az első (vagyis írt számos egységet egy kódot, hogy hány bájt, beleértve, elméletileg UTF8 formátumban nem korlátozza a bájtok számát történő felvétel száma de általában nem több, mint 6 használnak). Ezután 0 van írva (annak érdekében, hogy elválasszuk a bájtok számát a szignifikáns számjegyek száma), majd menj reprezentáló bitek egész szám. Az ezt követő byte sorozat kezdődik, 10 (nem tévesztendő össze egy byte-os és több byte-os karakterek - mind egyetlen bájtos Start nulla).
  1. Először is, 3 db. Ez azt jelenti, a felvétel során 3 bájt.
  2. Ezután 0. elválasztó rekord számú bájt a felvétel
  3. További számjeggyel. Az első 2 bit mindegyik byte (10) nem tartoznak hozzájuk - ez a címke, ami azt jelenti, hogy ez a második (harmadik, stb ...) Byte rekordot.

Így a rögzített kód - 0011011101000100. Ez az a kérdés, hogy hol volt a indextábla. Arra a kérdésre, hogyan kell használni a funkciót - igényei alapján. Ha mindig működnek a karakterek, a kód nem haladja meg a 256, majd a keresési táblázat, mert gyorsabb. Ha azt tervezi, hogy teljes Unicode támogatást, használja ezt a funkciót. Csak akkor kell módosítani, mert nem ismeri az 5- és 6-os karaktereket.

Sajnálom, a kifejezés „lookup-asztal” kiütött, és ihlette rossz egyesületek. Igen, valóban, ez a táblázat célja, hogy ellenőrizze az első bájt szekvencia, a döntés a hossza a kódot. Személy szerint én még mindig inkább a funkció - úgy néz ki, sokkal tömörebb. De a lookup-table gyorsabb, ha az alapvetően jobb kihasználása.

> Ha mindig működnek a karakterek, a kód nem haladja meg a 256, majd a keresési táblázat, mert gyorsabb. Ha azt tervezi, hogy teljes Unicode támogatást, használja ezt a funkciót. Köszönöm a választ. Miért gondolja, hogy nem működik a Unicode karaktereket? Ez véleményem szerint csak tervezték, hogy csak a lekérdezés csak történik az első bájt. nem igaz? E kapcsolat, csak használja úgy, hogy előre meghatározni, hogy hány bájt 1, 2 vagy 6 másolni. - Stanislav Pankevich február 24 '14 at 13:26

Felhívjuk figyelmét, hogy öntött el a függvény visszatérési értéke csak 1, 2, 3 és 4, ezért meg kell határoznia a 6-os karakter, ez elvileg nem (ez lesz neki a 4 byte-os). - fori1ton február 24 '14 at 13:29




Kapcsolódó cikkek