Heim  >  Artikel  >  Java  >  So lösen Sie verstümmelte chinesische Java-Zeichen

So lösen Sie verstümmelte chinesische Java-Zeichen

伊谢尔伦
伊谢尔伦Original
2016-11-26 09:55:391446Durchsuche

Mit der Entwicklung und Popularisierung von Computern werden Länder auf der ganzen Welt ihre eigenen Codierungsstile entwerfen, um sie an ihre eigenen Sprachen und Zeichen anzupassen. Gerade aufgrund dieses Chaos gibt es viele Codierungsmethoden, so dass das Gleiche der Fall ist Binärzahl Kann als unterschiedliche Symbole interpretiert werden. Um dieses Inkompatibilitätsproblem zu lösen, entstand die großartige Idee der Unicode-Kodierung! !

Unicode

Unicode wird auch als Unicode, Unicode und Unicode bezeichnet. Es wurde entwickelt, um die Einschränkungen herkömmlicher Zeichenkodierungsschemata zu überwinden. Es bietet universellen Code für jedes Zeichen in jeder Sprache Für Zeichen wird eine einheitliche und eindeutige binäre Kodierung festgelegt, um die Anforderungen für die sprach- und plattformübergreifende Textkonvertierung und -verarbeitung zu erfüllen. Sie können sich Unicode als einen „großen Zeichencontainer“ vorstellen, der alle Symbole der Welt enthält, und jedes Symbol hat seine eigene einzigartige Codierung, was das Problem verstümmelter Zeichen grundlegend löst. Unicode ist also eine Kodierung aller Symbole [2].

Unicode wurde mit dem Standard des universellen Zeichensatzes entwickelt und auch in Form eines Buches veröffentlicht. Es handelt sich um einen Industriestandard, der die meisten Schriftsysteme der Welt organisiert und codiert, damit Computer An verwenden können einfachere Möglichkeit, Texte darzustellen und zu verarbeiten. Unicode wird immer noch kontinuierlich überarbeitet und umfasst inzwischen mehr als 100.000 Zeichen. Es ist in der Branche weithin anerkannt und wird häufig im Internationalisierungs- und Lokalisierungsprozess von Computersoftware verwendet.

Wir wissen, dass Unicode entwickelt wurde, um die Einschränkungen herkömmlicher Zeichencodierungsschemata zu lösen. Bei herkömmlichen Codierungsmethoden haben sie alle ein gemeinsames Problem: Sie können keine mehrsprachigen Umgebungen unterstützen, was für das Internet ein offenes Problem ist . Umgebung ist nicht erlaubt. Derzeit unterstützen fast alle Computersysteme das grundlegende lateinische Alphabet und jedes unterstützt verschiedene andere Kodierungsmethoden. Um mit ihnen kompatibel zu sein, reserviert Unicode die ersten 256 Zeichen für die in ISO 8859-1 definierten Zeichen, sodass die Konvertierung bestehender westeuropäischer Sprachen keine besonderen Überlegungen erfordert und eine große Anzahl derselben Zeichen werden wiederholt in verschiedene Go-Zeichencodes codiert, sodass die alten und komplizierten Codierungsmethoden direkt in und von der Unicode-Codierung konvertiert werden können, ohne dass Informationen verloren gehen [1].

Implementierungsmethode

Die Unicode-Codierung eines Zeichens wird bestimmt, ist jedoch im tatsächlichen Übertragungsprozess aufgrund des Designs verschiedener Systemplattformen nicht unbedingt konsistent und dient der Platzersparnis , Unicode-Kodierung wird anders implementiert. Die Implementierung von Unicode heißt Unicode Transformation Format (kurz UTF) [1].

Unicode ist ein Zeichensatz, der hauptsächlich über drei Implementierungsmethoden verfügt: UTF-8, UTF-16 und UTF-32. Da UTF-8 die aktuelle Mainstream-Implementierungsmethode ist, werden UTF-16 und UTF-32 relativ selten verwendet, daher wird im Folgenden hauptsächlich UTF-8 vorgestellt.

UCS

Bei der Erwähnung von Unicode ist es möglicherweise erforderlich, etwas über UCS zu wissen. UCS (Universal Character Set) ist ein Standardzeichensatz, der durch den von ISO formulierten Standard ISO 10646 (oder ISO/IEC 10646) definiert ist. Es umfasst alle anderen Zeichensätze und gewährleistet so eine bidirektionale Kompatibilität mit anderen Zeichensätzen. Das heißt, wenn Sie eine Textzeichenfolge in das UCS-Format übersetzen und dann wieder in die ursprüngliche Kodierung übersetzen, gehen keine Informationen verloren.

UCS weist jedem Zeichen nicht nur einen Code zu, sondern gibt ihm auch einen offiziellen Namen. Hexadezimalzahlen, die einen UCS- oder Unicode-Wert darstellen, wird normalerweise ein „U+“ vorangestellt, beispielsweise steht „U+0041“ für das Zeichen „A“.

Little Endian und Big Endian

Aufgrund der unterschiedlichen Designs der einzelnen Systemplattformen können einige Plattformen ein unterschiedliches Verständnis von Zeichen haben (z. B. das Verständnis der Bytereihenfolge). Dies führt dazu, dass der vereinbarte Bytestream als unterschiedlicher Inhalt interpretiert wird. Beispielsweise ist der Hexadezimalwert eines bestimmten Zeichens 4E59 und wird in 4E und 59 aufgeteilt. Beim Lesen auf dem MAC beginnt es mit dem niederwertigen Bit. Wenn der MAC dann auf den Bytestrom trifft, wird er als analysiert 594E. Suchen Das Zeichen ist „Kui“, aber auf der Windows-Plattform beginnt das Lesen beim High-Byte, also 4E59, und das gefundene Zeichen ist „B“. Mit anderen Worten: „B“, das auf der Windows-Plattform gespeichert ist, wird auf der MAC-Plattform zu „Kui“. Dies führt unweigerlich zu Verwirrung. Daher werden bei der Unicode-Codierung zwei Methoden verwendet, um zwischen Big Endian und Little Endian zu unterscheiden. Das heißt, das erste Byte kommt zuerst, was dem Big-Endian-Modus entspricht, und das zweite Byte kommt zuerst, was dem Little-Endian-Modus entspricht. Zu diesem Zeitpunkt stellt sich also die Frage: Woher weiß der Computer, welche Kodierungsmethode eine bestimmte Datei verwendet?

In der Unicode-Spezifikation ist definiert, dass am Anfang jeder Datei ein Zeichen hinzugefügt wird, das die Codierungssequenz angibt. Der Name dieses Zeichens heißt „ZERO WIDTH NO-BREAK SPACE“ und wird durch FEFF dargestellt. Das sind genau zwei Bytes und FF ist um eins größer als FE.

Wenn die ersten beiden Bytes einer Textdatei FE FF sind, bedeutet dies, dass die Datei den Big-Endian-Modus verwendet. Wenn die ersten beiden Bytes FF FE sind, bedeutet dies, dass die Datei den Small-Endian-Modus verwendet.

UTF-8

UTF-8 ist eine Zeichenkodierung mit variabler Länge für Unicode. Sie kann 1 bis 4 Bytes zur Darstellung eines Symbols verwenden, und die Bytes variieren je nach Symbollänge . Es kann zur Darstellung jedes Zeichens im Unicode-Standard verwendet werden und das erste Byte in seiner Kodierung ist weiterhin mit ASCII kompatibel. Dadurch kann das ursprüngliche System, das ASCII-Zeichen verarbeitet, ohne oder mit nur geringfügigen Änderungen weiter verwendet werden. Daher hat es sich nach und nach zur bevorzugten Kodierung für E-Mails, Webseiten und andere Anwendungen entwickelt, die Text speichern oder übertragen.

UTF-8 verwendet ein bis vier Bytes zum Kodieren jedes Zeichens. Die Kodierungsregeln lauten wie folgt:

1) Bei Einzelbyte-Symbolen wird das erste Bit des Bytes auf 0 gesetzt , die folgenden 7 Bits sind der Unicode-Code dieses Symbols. Für englische Buchstaben sind also die UTF-8-Kodierung und der ASCII-Code gleich.

2) Für n-Byte-Symbole (n>1) werden die ersten n Bits des ersten Bytes auf 1 gesetzt, das n+1. Bit wird auf 0 gesetzt und die ersten beiden Bits des folgenden Bytes werden auf 1 gesetzt. Immer auf 10 gesetzt. Die übrigen nicht erwähnten Binärbits sind alle der Unicode-Code dieses Symbols.

Die Konvertierungstabelle lautet wie folgt:

So lösen Sie verstümmelte chinesische Java-Zeichen

Gemäß der obigen Konvertierungstabelle wird es sehr einfach, die Kodierungsregeln für die UTF-8-Konvertierung zu verstehen: die erstes Zeichen Wenn das erste Bit des Abschnitts 0 ist, bedeutet dies, dass dieses Byte allein ein Zeichen ist. Wenn es 1 ist, gibt die Anzahl der aufeinanderfolgenden Einsen an, wie viele Bytes das Zeichen einnimmt.

Nehmen Sie das chinesische Schriftzeichen „yan“ als Beispiel, um zu demonstrieren, wie die UTF-8-Codierung implementiert wird [3].

Es ist bekannt, dass der Unicode von „streng“ 4E25 (100111000100101) ist. Gemäß der obigen Tabelle kann festgestellt werden, dass 4E25 im Bereich der dritten Zeile liegt (0000 0800-0000 FFFF). Die „strenge“ UTF-8-Kodierung erfordert also drei Bytes, das heißt das Format ist „1110xxxx 10xxxxxx 10xxxxxx“. Füllen Sie dann, beginnend mit der letzten Binärziffer von „strict“, das x im Format von hinten nach vorne aus und füllen Sie die zusätzlichen Bits mit 0 auf. Auf diese Weise erhalten wir, dass die UTF-8-Kodierung von „Yan“ „11100100 10111000 10100101“ ist, die in Hexadezimal umgewandelt E4B8A5 ist.

Konvertierung zwischen Unicode und UTF-8

Anhand des obigen Beispiels können wir sehen, dass der Unicode-Code von „strict“ 4E25 und die UTF-8-Codierung E4B8A5 ist Das Gleiche muss durch Programmkonvertierung erreicht werden. Die einfachste und intuitivste Methode auf der Windows-Plattform ist Notepad.

Unter „Kodierung (E)“ gibt es vier Optionen: ANSI, Unicode, Unicode Big Endian, UTF-8.

ANSI: Die Standardkodierungsmethode von Notepad ist die ASCII-Kodierung für englische Dateien und die GB2312-Kodierung für vereinfachte chinesische Dateien. Hinweis: Verschiedene ANSI-Codes sind nicht miteinander kompatibel, wenn Informationen international ausgetauscht werden. Texte, die zu zwei Sprachen gehören, können nicht im selben ANSI-codierten Text gespeichert werden.

Unicode: UCS-2-Codierungsmethode , wobei zwei Bytes direkt zum Speichern des Unicode-Codes des Zeichens verwendet werden. Bei dieser Methode handelt es sich um die „Little-Endian“-Methode.

Unicode Big Endian: UCS-2-Kodierungsmethode, „Big End“-Methode.

UTF-8: Lesen Sie oben (UTF-8).

>>> Beispiel: Geben Sie das Wort „strict“ in Notepad ein, wählen Sie vier Kodierungsstile aus: ANSI, Unicode, Unicode Big Endian und UTF-8, speichern Sie es dann unter, verwenden Sie das EditPlus-Texttool und verwenden Sie „ 16 Überprüfen Sie es mit „Hexadecimal Viewer“ und erhalten Sie die folgenden Ergebnisse:

ANSI: Die beiden Bytes „D1 CF“ entsprechen genau der GB2312-Kodierung von „strict“.

Unicode: vier Bytes „FF FE 25 4E“, wobei „FF FE“ die Small-End-Speichermethode darstellt und die tatsächliche Codierung „25 4E“ ist.

Unicode Big Endian: vier Bytes „FE FF 4E 25“, „FE FF“ stellt die Big-End-Speichermethode dar und die tatsächliche Codierung ist „4E 25“.

UTF-8: Die Kodierung beträgt sechs Bytes „EF BB BF E4 B8 A5“. Die ersten drei Bytes „EF BB BF“ zeigen an, dass es sich um UTF-8-Kodierung handelt, und die letzten drei Bytes „E4B8A5“. Die spezifische Codierung ist „streng“, ihre Speicherreihenfolge stimmt mit der Codierungsreihenfolge überein.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Java NIO-TutorialNächster Artikel:Java NIO-Tutorial