Witajcie,
Czy rozmiar null terminatora w zależności od UTF się różni? Znaczy w ASCII wiadomo jest to bajt = 0, ale czy w UTF16 i 32 są to odpowiednio 2 i 4 czy też 1? Piszę dekodowanie, więc muszę zrobić StrLen dla UTF. Albo gdzie to sprawdzić?
Witajcie,
Czy rozmiar null terminatora w zależności od UTF się różni? Znaczy w ASCII wiadomo jest to bajt = 0, ale czy w UTF16 i 32 są to odpowiednio 2 i 4 czy też 1? Piszę dekodowanie, więc muszę zrobić StrLen dla UTF. Albo gdzie to sprawdzić?
ASCII / UTF8 = 1;
UTF16 = 2,
UTF32 = 4
A jeśli opierasz się na wchar_t to radzę sprawdzać sizeof, ponieważ na różnych systemach może być różny.
Znak o kodzie U+0000 zakodowany w UTF-16 będzie się składał z dwóch bajtów o wartości 0, a w UTF-32 z czterech.
Albo gdzie to sprawdzić?
UTF-8 (nie wiem jak reszta, ale pewnie podobnie) posiada znak null
, ale formalnie nie wyznacza on końca ciągu znaków - długość należy trzymać osobno, np. jako struktura:
struct Utf8String {
size_t length;
char* data;
}
Choć niektóre implementacje faktycznie (błędnie) wykorzystują go jako terminator.