Wie lese ich die UTF-8 Zeichen per pointer?

Nehme an, dass ich UTF-8-Inhalte im Speicher gespeichert, wie kann ich Lesen Sie die Zeichen mit einem Zeiger? Ich nehme an, ich brauche die Uhr für das 8. bit, das angibt, dass eine multi-byte-Zeichen, aber wie genau schalte ich die Zeichenfolge in einen gültigen Unicode-Zeichen? Auch ist wchar_t den richtigen Typ zu speichern eine einzelne Unicode-Zeichen?

Dies ist, was ich im Sinn haben:


   wchar_t readNextChar (char*& p)
   { 
       wchar_t unicodeChar;
       char ch = *p++;

       if ((ch & 128) != 0)
       {
           //This is a multi-byte character, what do I do now?
           //char chNext = *p++; 
           //... but how do I assemble the Unicode character?   
           ...
       }
       ...
       return unicodeChar;
   }  
 
  • Es macht keinen Sinn, zu sagen, das "die Breite der Unicode-Zeichen". Sie müssen sich für eine Codierung. Je nach Plattform ist die wchar_t sein könnten unterschiedlicher Größe. Auf einem Unix-artigen OS ist es in der Regel 32bit, so können Sie speichern in UTF-32 codierte Unicode-Zeichen, bei Windows ist dies 16bit, so dass es UTF-16 codierte Unicode-Zeichen.
  • Neben der Rückkehr der Breite Charakter, Ihre readNextChar Funktion muss Informationen, um richtig zu aktualisieren p. UTF-8 (oder UTF-16, für diese Angelegenheit) sind variable-Länge-Kodierungen und Ihr Gesprächspartner können nicht annehmen, dass eine Konstante oder einfaches Inkrementieren der Zeiger.
Schreibe einen Kommentar