c ++ - Konverter utf-8 chracters i en fil til hex

Indlæg af Hanne Mølgaard Plasc

Problem



Der er nogle utf-8 tegn i en tekstfil, jeg vil behandle dem og konvertere dem til hex-format, skrive deres hex-værdier skrevet til en anden fil, hvad er den bedste måde at gøre dette på?
Jeg ved wstring, wchar men de kan ikke gemme utf-8 tegn, char16\_t og char32\_t kan gemme, men de understøtter ikke iostream. Nogle poeple foreslog at bruge ICU biblioteket, men kravet er, at det er bedst at ikke bruge de eksterne biblioteker.

Bedste reference


Hvis du ikke vil bruge eksterne biblioteker, har du stort set to muligheder:



  • Analysér bytes selv.

  • MultiByteToWideChar(CP\_UTF8, ...) [4]



Du kan bruge MultiByteToWideChar, hvis filen er lille nok til at passe i hukommelsen. Hvis der er nogen koder uden for BMP, så skal du håndtere surrogatpar. [5]


At analysere dig selv er ikke så svært, heller ikke hvis du ved, hvordan du tester og skifter bit i en byte. Wikipedia har en ret god artikel, der giver de fleste detaljer ... [6]

Andre referencer 1


Jeg håber det hjælper:

int ascii\_to\_utf8(unsigned char c, char * out) { int len = 0; char x = 0; if(c < 128) { out[0] = c; len = 1; } else { out[0] = (c >> 6) | 0xC0; out[1] = (c & 0x3F) | 0x80; len = 2; } return len; }

int utf8\_to\_ascii(unsigned char * c, char * out) { int len = 1; if(*c > 0xC0) { * out = (( c[0] << 6 ) & 0xC0 ) | ( c[1] & 0x3F ); len = 2; } else { * out = * c; } return len; }