Wo kann ich eine UTF8 Bits char Tabelle konvertieren zum Beispiel „à ±“ in „ñ“ finden?

StackOverflow https://stackoverflow.com/questions/3920432

Frage

Ich habe mich gründlich über das Web und ich kann nicht eine Tabelle mit dieser Art von Umwandlungen zu finden scheinen. Die, die ich habe finden einige Fehler und sind nicht allzu zuverlässig, so dass ich für einige offizielle Tisch ausgesehen haben oder gleich, aber leider nicht .. Ich habe so bin ich hier ..

Wie bereits erwähnte im Titel, was ich will zum Beispiel zu tun ist, weiß, was tut „à ±“ steht für (dies weiß ich schon .. „ñ“), aber nicht nur für die spanischen Zeichen, aber andere ( ich weiß schon, die polnischen ist).

Das Hauptproblem ist, ich eine Zeichenfolge in PHP haben, die manchmal wie zum Beispiel „En“ kommen kann (was in Ordnung ist) und andere als „eà ± e“ .. und in der lattest sollte ich in der Lage sein, es zu ändern " eñe“so ist es lesbar .. aber ob es in Ordnung ist, ich will nicht, es zu ändern. Um dies zu tun, ich war mit utf8_decode Funktion, aber im Fall der String lesbar ist, wird es noch die „ñ“ auf „¦“ (aber weiß) .. so ändern, das ist, warum kann ich nicht immer die Zeichenfolge entschlüsseln, und wenn ich die mb_detect_encoding Funktion zu verwenden, werde ich immer bekommen „UTF-8“ als Antwort .. und es ist nicht so hilfreich ..

Nachdem ich all die UTF-8-Bit-Zeichen geschrieben, wie zum Beispiel „à ±“ für „ñ“, „A¹“ für „Z“ kennen, usw., ich plane, eine Funktion zu tun, die im Wesentlichen einen zum anderes ersetzen werden. ., das ist eine Art von der gleichen Sache, dass die utf8_decode tut .. es sei denn hier jemand eine bessere Lösung hat!

Vielen Dank im Voraus! Grüße!

War es hilfreich?

Lösung

Warum wollen Sie das tun? Wollen Sie beschädigte Daten oder so erholen?

Es sollte wirklich nicht als Teil des üblichen Geschäft Code Flusses erfolgen. Alles, was Sie tun müssen, ist, dass alle Schichten der Webapp verwendet UTF-8 richtig zu gewährleisten. Die PHP Quelle, die HTTP-Antwort-Header und Körper, die DB-Tabelle, die DB-Verbindung, und so weiter. Siehe auch PHP UTF-8 Spickzettel .

Wenn Sie wirklich wollen, dies zu tun als einmalige Aufgabe beschädigte Daten wiederherzustellen, dann ist es gut zu wissen, dass die beschädigten Daten in Ihrer Frage zeigen UTF-8-Daten, die nicht richtig gespeichert worden ist oder als ISO-8859-1 angezeigt. Sie müssen nur die Daten als ISO-8859-1 und Schreib als UTF-8 lesen. Einmal. Dann tut es dem richtigen Weg.

Als Beweis, der ñ ( Unicode-Zeichen ‚Kleiner lateinischer Buchstabe N mIT TILDE‘(U + 00F1) ) existieren in Unicode ( UTF-8 , eine Multi-Byte-Codierung) von Bytes 0xC3 und 0xB1. Wenn dieser Bytes codiert werden, eine Ein-Byte-Codierung, wie ISO-8859-1 verwendet wird, dann wird die 0xC3 Ã und die 0xB1 ± wird. Siehe auch die ISO-8859-1-Codepage Layout .

Andere Tipps

Das Problem ist, dass, wenn Sie Mojibake , gibt es keine zuverlässige Art und Weise zu konvertieren zurück, was es sollte bedeuten. Siehe dieser Absatz bei Wikipedia für eine Erklärung des Problems:

  

Betrachten Sie eine Textdatei mit dem deutschen Wort mit für in der ISO-8859-1-Codierung. Diese Datei wird nun mit einem Texteditor geöffnet, der die Eingabe annimmt, ist UTF-8. Da das erste Byte (0x66) im Bereich 0x00-0x7F ist, UTF-8 interpretiert sie korrekt als f. Das zweite Byte (0xFC) kein Rechtswert für den Beginn jeder UTF-8-codierten Zeichen. Ein Texteditor daher könnte das Byte mit dem Ersatzzeichen-Symbol ersetzt die Benutzer zu warnen, dass etwas schief gelaufen ist. Das letzte Byte (0x72) liegt auch im Codebereich 0x00-0x7F und korrekt decodiert werden kann. Die ganze Reihe zeigt nun wie folgt aus:. f�r

     

Ein schlecht implementierter Texteditor kann die Ersetzung in UTF-8-Form speichern; die Textdatei Daten werden dann wie folgt aussehen: 0x66 0xEF 0xBF 0xBD 0x72, die in ISO-8859-1 wieder als f�r angezeigt. Der Austausch zerstört auch das ursprüngliche Byte, was es unmöglich macht zu erholen, was Charakter bestimmt war.

Sie müssen falsch zu interpretieren Text mit der falschen Codierung von Anfang an vermeiden. Fixing es, wenn es kaputt ist zu spät ist.

Ihr Problem ist ein Problem der Interpretation mehr als Transcodierung. Auf jedem modernen Computer, ñ ist normalerweise Eingang als binärer 0xc3b1, wie es sein UTF-8-Code ist. Wenn Sie das interpretieren (ohne Transcodierung) in altem iso-Latin-15-Code, werden Sie 0xC3 = Ã erhalten, gefolgt von 0xB1 = ±. Aus diesem Grunde gibt es keinen „Tisch“. Es ist ein Anzeigeproblem

Das Beste, was zu tun ist, zu vermeiden iso-latin vollständig. Es führt dazu, dass Sie viele Probleme. Der eigentliche Weg, um Ihr Programm zu beheben ist. Verwendung nur utf-8 überall, wird es Ihnen viel Zeit und Kopfschmerzen speichert

In der Zwischenzeit, wenn Sie wirklich wollen, den entsprechenden ISO-Latin-15-String zu Ihrem utf-8-Eingang holen (was Sie nicht tun, wenn Sie die oben richtig verstanden haben), können Sie Ihre Zeichenkette an einen Code passieren können Wandler, fragen sie utf-8 ISO-Latin-15 zu konvertieren. Eine Sache, die Sie sollten vorsichtig sein, ist doppelt Umcodierung. Wenn Sie einen utf-8-String hatten und mistakingly für eine Umwandlung von iso-Lating-15 gebeten, utf-8, dann haben Sie einen utf-8-String, dass tatsächlich sagt à ±, die binäre 0xc383c2b1 ist. Um wieder den richtigen utf-8-String ist die anwser gleich: fragen Sie Ihren verstümmelten String von UTF-8 zu konvertieren, um iso-latin-15, die glücklich 0xc383 nehmen und wandeln sie in 0xC3, dann 0xc2b1 und wandeln es in 0xB1, gibt Ihnen einen korrekten utf-8-String eine korrekte ñ enthält.

Speziell für PHP und Web-Anwendungen, denken Sie daran, dass viele Computer (und mehr und mehr in der Zukunft) senden Sie utf-8 standardmäßig aktiviert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top