Ich verwende die ICU-Bibliothek in C ++ unter OS X. Alle meine Zeichenfolgen sind UnicodeStrings, aber ich muss Systemaufrufe wie fopen, fread und so weiter verwenden. Diese Funktionen nehmen const char * oder char * als Argumente an. Ich habe gelesen, dass OS X UTF-8 intern unterstützt, so dass ich nur meinen UnicodeString in UTF-8 konvertieren muss, aber ich weiß nicht, wie ich das machen soll.
UnicodeString hat eine toUTF8 () -Memberfunktion, aber es gibt einen ByteSink zurück. Ich habe auch diese Beispiele gefunden: Ссылка und lese über die Verwendung eines Konverters, aber ich bin immer noch verwirrt. Jede Hilfe würde sehr geschätzt werden.
Rufen Sie UnicodeString::extract(...)
auf, um in ein char * zu extrahieren, übergeben Sie NULL für den Konverter, um den Standardkonverter zu erhalten (der in dem Zeichensatz ist, den Ihr Betriebssystem verwendet).
ICU-Benutzerhandbuch & gt; UTF-8 bietet Methoden und Beschreibungen dazu.
Der einfachste Weg, um UTF-8-Zeichenfolgen in UTF-16-APIs zu verwenden, ist über die C ++% -Methode
icu::UnicodeString
undfromUTF8(const StringPiece &utf8)
. Es gibt auchtoUTF8String(StringClass &result)
.
Und toUTF8(ByteSink &sink)
wird jetzt nicht bevorzugt.
Hinweis:
extract()
hat Konstruktoren,icu::UnicodeString
undsetTo()
Methoden, die entweder ein Konverterobjekt oder einen Zeichensatznamen verwenden. Diese können für UTF-8 verwendet werden, sind aber nicht so effizient oder praktisch wie die oben genannten Methodenextract()
/fromUTF8()
/toUTF8()
.
Tags und Links c++ windows utf-8 internationalization icu