Bitte beachten Sie, dass ASCII ein 7-Bit-Format ist. Es gibt 8-Bit-Kodierungen, wenn Sie nach einer dieser (wie ISO 8859-1) suchen, müssen Sie genauer sein.
Um eine ASCII-Zeichenfolge in UTF-8 zu konvertieren, tun Sie nichts: Sie sind identisch. Wenn also Ihre UTF-8-Zeichenfolge nur aus ASCII-Zeichen besteht, ist sie bereits eine ASCII-Zeichenfolge und es ist keine Konvertierung erforderlich.
Wenn die UTF-8-Zeichenfolge Nicht-ASCII-Zeichen (alles mit Akzenten oder nicht-lateinischen Zeichen) enthält, gibt es keine Möglichkeit, sie in ASCII zu konvertieren. (Möglicherweise können Sie es möglicherweise in eine der ISO-Kodierungen konvertieren.)
Es gibt Möglichkeiten, die Akzente von lateinischen Zeichen zu entfernen, um zumindest eine gewisse Ähnlichkeit in ASCII zu bekommen. Wenn Sie nur die Nicht-ASCII-Zeichen löschen möchten, löschen Sie einfach alle Bytes mit Werten & gt; = 128 aus der Zeichenfolge utf-8.
Dieses Beispiel funktioniert unter Windows (Sie haben Ihr Zielbetriebssystem nicht erwähnt):
%Vor% Denken Sie daran, dass delete[] wide;
und / oder ansi
nicht mehr benötigt werden. Da dies Unicode ist, würde ich empfehlen, bei wchar_t*
anstelle von char*
zu bleiben, es sei denn, Sie sind sicher, dass der Eingabepuffer Zeichen enthält, die zu derselben ANSI-Untergruppe gehören.
UTF-8 ist eine Kodierung, die jedes Unicode-Zeichen abbilden kann. ASCII unterstützt nur eine sehr kleine Untermenge von Unicode.
Für die Untergruppe von Unicode, die ASCII ist, ist die Zuordnung von UTF-8 zu ASCII eine direkte Eins-zu-Eins-Bytezuordnung. Wenn der Server Ihnen also ein Dokument sendet, das nur ASCII-Zeichen in UTF-8-Codierung enthält Sie können das direkt als ASCII lesen.
Wenn die Antwort Nicht-ASCII-Zeichen enthält, können Sie sie nicht in ASCII ausgeben. Um diese aus einem UTF-8-Stream herauszufiltern, können Sie einfach jedes Byte & gt; = 128 (0x80 hex) herausfiltern.
Wenn die Zeichenfolge Zeichen enthält, die nicht in ASCII vorhanden sind, gibt es nichts, was kann , da diese Zeichen in ASCII nicht existieren.
Wenn die Zeichenkette nur Zeichen enthält, die tun in ASCII existieren, dann brauchen Sie nichts zu tun, da die Zeichenkette
Anstatt einfach zu versuchen, die Zeichenfolge zu konvertieren , könnten Sie versuchen, die Zeichenfolge zu transkribieren . Die meisten Sprachen auf diesem Planeten haben eine Art ASCII-Transliterationsschema, das den Text zumindest einigermaßen verständlich macht. Zum Beispiel ist mein Vorname "Jörg" und seine ASCII-Transliteration wäre "Joerg". Der Name des Erstellers der Programmiersprache Ruby lautet "ま つ も と ゆ き ろ and and and and and and and and and and and its its its its its its its its its its its its its its its its its its its its its Beachten Sie jedoch, dass Sie > Informationen verlieren. Zum Beispiel wird die deutsche sz-Ligatur in "ss" transkribiert, so dass das Wort "Maße" in "Masse" transkribiert wird. "Masse" (Masse, im Sinne des Physikers, nicht des Christen) ist jedoch auch ein Wort. Als ein anderes Beispiel hat Türkisch 4 "i" s (klein und groß, mit und ohne Punkt) und ASCII hat nur 2 (klein mit Punkt und Großbuchstabe ohne Punkt), deshalb werden Sie entweder Informationen über den Punkt verlieren oder ob es oder nicht war ein Großbuchstabe.
Die Methode only , die keine Informationen verliert (mit anderen Worten: beschädigte Daten), besteht also darin, die Nicht-ASCII-Zeichen in Sequenzen von ASCII-Zeichen zu codieren . Es gibt viele gängige Codierungsschemata: SGML-Entitätsverweise, MIME, Unicode-Escape-Sequenzen, Τ Ε Χ oder LaΤ Ε Χ. Also würden Sie die Daten codieren, wenn sie in Ihr System gelangen, und sie entschlüsseln, wenn sie das System verlassen.
Natürlich wäre der einfachste Weg, Ihr System einfach zu reparieren.
Überprüfen Sie diese utf-8 String-Bibliothek , vergessen Sie nicht, sie in ASCII umzuwandeln.
UTF-8 ist abwärtskompatibel mit ASCII, dh alle ASCII-Zeichen sind in UTF-8 als einzelne unveränderte Byte-Werte codiert. Wenn der Text ASCII sein soll, Sie ihn aber nicht lesen können, muss ein anderes Problem auftreten.
ASCII ist eine Codepage, die 128 Zeichen und Steuercodes darstellt, wobei utf8 jedes Zeichen im Unicode-Standard darstellen kann, das viel mehr mit ASCII-Fähigkeiten zu tun hat. Also Antwort auf Ihre Frage ist: Nicht möglich Es sei denn, Sie haben weitere Spezifikationen für die Datenquelle.
Beachten Sie, dass es zwei UTF8
-Typen gibt: UTF8_with_BOM und UTF8_without_BOM . Und Sie müssen anders für sie in ANSI
konvertieren. Die folgenden Funktionen funktionieren.
UTF8_mit_BOM bis ANSI
%Vor%UTF8_without_BOM bis ANSI
%Vor%Zur Formulierung
"Wenn die Zeichenfolge Zeichen enthält, die nicht in ASCII vorhanden sind, gibt es nichts, was Sie tun können, denn diese Zeichen existieren im ASCII-Format nicht."
es ist falsch.
UTF-8 ist ein Multibyte-Code und kann mehr als zwei Sätze von Symbolen (Sprachen) enthalten. Praktisch haben Sie entweder einzelne Sprache (Englisch wie üblich) oder 2 Sprachen, von denen eine Englisch ist.
Unter den obigen Bedingungen können Sie UTF-8 in ASCII-Zeichen konvertieren. Entsprechendes funktionales gibt es in C ++ nicht. So können Sie es manuell tun. Es ist einfach, zwei Bytesymbole von 1 Byte zu erkennen. Das High-Bit des ersten Bytes wird für Zwei-Byte-Einsen gesetzt und ansonsten deaktiviert.
Tags und Links c++