Gibt es eine Möglichkeit zur Konvertierung von UTF8 nach iso-8859-1?
Meine software immer einige strings in UTF8 als ich brauche, um zu konvertieren, um ISO 8859-1. Ich weiß, dass UTF8-Domäne größer ist, als iso-8859. Aber die Daten im UTF8 Format wurde zuvor upconverted von ISO, also sollte ich nicht verpassen.
Ich würde gerne wissen, ob es einen einfachen /direkten Weg zur Konvertierung von UTF8 nach iso-8859-1.
Dank
- Wenn Sie eine Bibliothek benutzen, die hat die Umstellung, es sollte auch etwas haben, um es zu konvertieren zurück. Vorausgesetzt, Sie ändern nicht alle Zeichen in der Zeichenfolge, die Sie sollten in Ordnung sein, nur geben es zurück.
InformationsquelleAutor fazineroso | 2012-06-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Funktion, die Sie nützlich finden könnten:
utf8_to_latin9()
. Es wandelt aufISO-8859-15
(einschließlich EURO), dieISO-8859-1
nicht haben), aber funktioniert auch einwandfrei für dieUTF-8
->ISO-8859-1
Umwandlung Teil einerISO-8859-1
->UTF-8
->ISO-8859-1
round-trip.Die Funktion ignoriert ungültige code Punkte ähnlich wie
//IGNORE
Flagge für iconv, aber nicht wieder zusammensetzen zerlegt UTF-8-Sequenzen; das heißt, es lässt sich nicht einschaltenU+006E U+0303
inU+00F1
. Ich nicht die Mühe, die Neuanordnung, da iconv nicht entweder.Die Funktion ist sehr vorsichtig über die string-Zugang. Es wird nie Scannen über den Puffer. Der Ausgabepuffer muss ein byte länger als die Länge, weil es immer hängt die end-of-string " NUL-byte. Die Funktion gibt die Anzahl der Zeichen (bytes) in der Ausgabe, nicht einschließlich der end-of-string " NUL-byte.
Beachten Sie, dass Sie können fügen Sie benutzerdefinierte transliteration für bestimmte code-Punkte in der
to_latin9()
Funktion, aber Sie sind beschränkt auf die ein-Zeichen-Ersetzungen.Wie es derzeit geschrieben ist, kann die Funktion in-place-Konvertierung sicher: input-und output-Zeiger können die gleichen sein. Der Ausgabe-string wird nie länger sein, als der input-string. Wenn Sie Ihre Eingabe string hat Platz für ein extra-byte (zum Beispiel, es hat NUL Beendigung des string), können Sie sicher verwenden Sie die oben beschriebene Funktion zum konvertieren von UTF-8 auf ISO-8859-1/15. Ich schrieb bewusst so, weil es zu speichern, sollten Sie einige Mühe in einer integrierten Umgebung, obwohl dieser Ansatz ist ein bisschen beschränkt wrt. die Anpassung und Erweiterung.
Edit:
Habe ich ein paar Funktionen für die Konvertierung in einem edit zu beantworten für beide Latin-1/9 zur/von UTF-8-Konvertierung (ISO-8859-1 oder -15 to/from UTF-8); der Hauptunterschied ist, dass diese Funktionen geben einen dynamisch zugewiesenen Kopie, und behalten Sie die ursprüngliche Zeichenfolge intakt.
tocode
ist"ISO_8859-1"
undfromcode
ist"UTF-8"
.Beispiel:
gconv
: gnu.org/software/libc/manual/html_node/...iconv_close()
für die Befreiung der Mitteliconv_open()
. Setzen Sie einfachiconv_close(cd);
vor derprintf("%s -> %s\n", input, output);
Linie.