Umwandlung von "normalen" std::string nach utf-8
Mal sehen, ob ich das erklären kann, ohne zu viele sachliche Fehler...
Schreibe ich eine string-Klasse und ich möchte es verwenden utf-8
(gespeichert in einem std::string), wie es in den internen Speicher.
Ich will, dass es in der Lage sein, sowohl "normale" std::string
und std::wstring
als ein-und Ausgang.
Arbeiten mit std::wstring ist kein problem, kann ich std::codecvt_utf8<wchar_t>
sowohl konvertieren von und nach std::wstring.
Jedoch nach umfangreichen googeln und die Suche SO habe ich noch einen Weg finden, um die Konvertierung zwischen einer "normalen/Standard" C++ std::string (ich nehme an, in Windows unter dem lokalen system-Lokalisierung?) und ein utf-8 std::string.
Ich denke, eine Möglichkeit wäre, zuerst konvertieren Sie die std::string in einen std::wstring mit std::codecvt<wchar_t, char>
und konvertieren Sie Sie dann in utf-8 wie oben, aber dieser scheint ziemlich ineffizient gegeben, dass zumindest die ersten 128 Werte eines char-übersetzen sollten, sofort in utf-8 ohne Konvertierung unabhängig von der Lokalisation, wenn ich das richtig verstehe.
Fand ich diese ähnliche Frage: C++: wie konvertieren von ASCII-oder ANSI in UTF8 und speichert Sie in std::string
Ich bin zwar ein bisschen skeptisch gegenüber, die Antwort, denn es ist schwer eine Kodierung latin-1 und ich möchte diese Arbeit mit allen Arten von Lokalisierung auf der sicheren Seite.
Keine Antworten, die boost-danke, ich will nicht, dass die Kopfschmerzen immer meine Codebasis zu arbeiten.
std::string
nicht über einen normalen/Standard-Kodierung. Sie können davon ausgehen, dass die std::string
Sie haben kodiert wird, je nach Gebietsschema, aber wenn zum Beispiel, Sie haben es gerade gelesen von einer Datei, dann könnte das falsch, da es codiert wird jedoch die Datei kodiert ist.Sowie in der Regel beim Lesen von raw-text-Dateien gibt es einfach keine Möglichkeit zu wissen, welche Kodierung es hat. Fehlen diese Informationen, scheint es eher für die Datei, die erstellt wurden auf einem system mit der gleichen Codierung, und deshalb habe ich angenommen, dass die Eingabe des Lesens der Datei in der lokalen Codierung.
OK, so kann man in der Tat entfernen Sie das Fragezeichen 🙂 Es ist kein Zweifel, dass Sie sind, vorausgesetzt, die Gebietsschema-spezifische Codierung.
InformationsquelleAutor DaedalusAlpha | 2014-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr "normalen string" codiert ist mit der system-Codepage, und Sie wollen es zu konvertieren zu UTF-8, dann sollte dies funktionieren:
es sei denn, Sie wollen schauen, wo sonst für eine Unicode-Bibliothek, mit der Windows-Codepages, dann ist dies das beste, was Sie tun können, mithilfe der Win32-API. Sie haben, um diese Zeichen außerhalb des 7-bit-Sortiment, also einfach mit einer Schleife ist nicht genug.
Was ist, wenn Sie das erste lief eine Schleife überprüfen, dass der Charakter innerhalb der 7-bit-Bereich und hinzufügen, um die utf-8-string -, und sobald der check nicht bestanden wird, würden Sie deaktivieren Sie die Zeichenfolge und zurück fallen? In diesem Fall wäre es sicherlich zumindest wie 1000% schneller für ascii-text-und nur zu maximal 20% langsamer für nicht ascii. Ich denke, eine Menge von text-Dateien zum Beispiel sind in der ascii-Bereich.
hängt davon ab, ob Sie in Amerika Lebe, oder nicht.
Nicht unbedingt, ich würde behaupten, dass eine Menge von text-Dateien ausgegeben werden, die von Programmen, die codiert sind in Deutsch und Ausgabe in Englisch. Auch eine Menge von text-Dateien enthält gar keinen text, nur zahlen, die fallen innerhalb des ascii-Bereichs. Ich Lebe in Schweden und kann sicher sagen, dass mindestens 99% aller text-Dateien auf meinem computer ist in Englisch oder nur zahlen enthalten, wie z.B. csv-Dateien.
InformationsquelleAutor Simple