Übersicht
Dieser Artikel umfasst hauptsächlich die folgenden Aspekte: Grundkenntnisse in Codierung, Java, Systemsoftware, URL, Tool-Software usw.
In der folgenden Beschreibung nehmen wir das Wort „Chinesisch“ als Beispiel. Nachdem wir die Tabelle nachgeschlagen haben, können wir erkennen, dass seine GB2312-Kodierung „d6d0 cec4“ und seine Unicode-Kodierung „4e2d 6587“ ist. , und seine UTF-Kodierung ist „e4b8ad“ e69687“. Beachten Sie, dass diese beiden Zeichen keine ISO8859-1-Kodierung haben, aber durch die ISO8859-1-Kodierung „dargestellt“ werden können.
2. Grundkenntnisse der Kodierung
Die früheste Kodierung ist ISO8859-1, die der ASCII-Kodierung ähnelt. Um jedoch den Ausdruck verschiedener Sprachen zu erleichtern, sind nach und nach viele Standardkodierungen entstanden. Die wichtigsten sind wie folgt.
2.1. iso8859-1
Es handelt sich um eine Einzelbyte-Kodierung, die 0-255 darstellen kann. Die Kodierung des Buchstabens „a“ lautet beispielsweise 0x61=97.
Es ist offensichtlich, dass der durch die ISO8859-1-Kodierung dargestellte Zeichenbereich sehr eng ist und keine chinesischen Zeichen darstellen kann. Da es sich jedoch um eine Einzelbyte-Kodierung handelt und mit der grundlegendsten Darstellungseinheit des Computers übereinstimmt, wird in vielen Fällen immer noch die ISO8859-1-Kodierung verwendet. Und bei vielen Protokollen wird diese Kodierung standardmäßig verwendet. Obwohl beispielsweise das Wort „Chinesisch“ in der ISO8859-1-Codierung nicht vorhanden ist, sollte es am Beispiel der GB2312-Codierung aus zwei Zeichen von „d6d0 cec4“ bestehen. Bei Verwendung der ISO8859-1-Codierung wird es in 4 Bytes aufgeteilt . Stellt dar: „d6 d0 ce c4“ (tatsächlich wird es beim Speichern auch in Bytes verarbeitet). Und wenn es sich um eine UTF-Kodierung handelt, sind es 6 Bytes „e4 b8 ad e6 96 87“. Offensichtlich muss diese Darstellung auf einer anderen Kodierung basieren.
2.2. GB2312/GBK
Dies ist der nationale Standardcode von Hanzi, der speziell zur Darstellung chinesischer Zeichen verwendet wird. Es handelt sich um eine Doppelbyte-Kodierung, mit der die englischen Buchstaben übereinstimmen iso8859-1 (kompatibel mit der Kodierung iso8859-1). Unter anderem kann die GBK-Codierung zur Darstellung traditioneller und vereinfachter Zeichen verwendet werden, während GB2312 nur vereinfachte Zeichen darstellen kann. GBK ist mit der GB2312-Codierung kompatibel.
2.3. Unicode
Dies ist die einheitlichste Kodierung, die zur Darstellung von Zeichen in allen Sprachen verwendet werden kann und eine Doppelbyte-Kodierung (auch Vier-Byte-Kodierung) fester Länge ist. inklusive englischer Buchstaben im Inneren. Man kann also sagen, dass es weder mit der ISO8859-1-Kodierung noch mit irgendeiner anderen Kodierung kompatibel ist. Im Vergleich zur ISO8859-1-Kodierung fügt die Uniocode-Kodierung jedoch nur ein 0-Byte voran, der Buchstabe „a“ ist beispielsweise „00 61“.
Es ist zu beachten, dass die Codierung mit fester Länge für Computer einfach zu verarbeiten ist (beachten Sie, dass GB2312/GBK keine Codierung mit fester Länge ist) und Unicode zur Darstellung aller Zeichen verwendet werden kann, so dass viele Softwareanwendungen verwendet werden Unicode-Codierung für die Verarbeitung, z. B. Java.
2.4. UTF
Wenn man bedenkt, dass die Unicode-Kodierung nicht mit der ISO8859-1-Kodierung kompatibel ist und leicht mehr Platz beansprucht: Denn für englische Buchstaben benötigt Unicode auch zwei Bytes zur Darstellung. Daher ist Unicode für die Übertragung und Speicherung nicht geeignet. Daher wurde die UTF-Kodierung entwickelt, die mit der ISO8859-1-Kodierung kompatibel ist und auch zur Darstellung von Zeichen in allen Sprachen verwendet werden kann. Die UTF-Kodierung ist jedoch eine Kodierung mit variabler Länge und die Länge jedes Zeichens reicht von 1 bis 6 Bytes. Darüber hinaus verfügt die UTF-Kodierung über eine einfache Überprüfungsfunktion. Im Allgemeinen werden englische Buchstaben durch ein Byte dargestellt, während chinesische Schriftzeichen drei Bytes verwenden.
Beachten Sie, dass UTF zwar verwendet wird, um weniger Platz zu verbrauchen, es jedoch nur im Vergleich zur Unicode-Codierung ist. Wenn Sie bereits wissen, dass es sich um chinesische Zeichen handelt, ist die Verwendung von GB2312/GBK zweifellos die wirtschaftlichste. Andererseits ist es erwähnenswert, dass die UTF-Codierung zwar 3 Bytes für chinesische Schriftzeichen verwendet, aber selbst für Webseiten mit chinesischen Schriftzeichen spart die UTF-Codierung mehr als die Unicode-Codierung, da die Webseite viele englische Schriftzeichen enthält.
3. Javas Verarbeitung von Zeichen
In der Java-Anwendungssoftware gibt es viele Stellen, an denen die Zeichensatzkodierung erforderlich ist, und einige Stellen müssen auf a eingestellt werden gewissermaßen damit umgehen.
3.1. getBytes(charset)
Dies ist eine Standardfunktion für die Java-String-Verarbeitung. Ihre Funktion besteht darin, die durch den String dargestellten Zeichen entsprechend dem Zeichensatz zu kodieren und in Bytes darzustellen. Beachten Sie, dass Zeichenfolgen immer in Unicode-Codierung im Java-Speicher gespeichert werden. Unter normalen Umständen wird „Chinesisch“ beispielsweise als „4e2d 6587“ gespeichert (d. h. wenn kein Fehler vorliegt), wird es als „d6d0 cec4“ codiert und dann als Byte „d6“. d0 ce c4" wird zurückgegeben. Wenn der Zeichensatz „utf8“ ist, lautet das Ende „e4 b8 ad e6 96 87“. Wenn es „iso8859-1“ ist, weil es nicht codiert werden kann, wird schließlich „3f 3f“ (zwei Fragezeichen) zurückgegeben.
3.2. neuer String (Zeichensatz)
Dies ist eine weitere Standardfunktion für die Java-String-Verarbeitung. Sie ist das Gegenteil der vorherigen Funktion. Sie kombiniert und identifiziert das Byte-Array gemäß der Zeichensatzcodierung und konvertiert es schließlich zur Speicherung in Unicode. Bezugnehmend auf das obige Beispiel von getBytes können sowohl „gbk“ als auch „utf8“ das korrekte Ergebnis „4e2d 6587“ erhalten, aber iso8859-1 wird schließlich zu „003f 003f“ (zwei Fragezeichen).
Da utf8 zur Darstellung/Codierung aller Zeichen verwendet werden kann, ist new String(str.getBytes("utf8"), "utf8") === str, was vollständig umkehrbar ist.
3.3. setCharacterEncoding()
Diese Funktion wird verwendet, um eine HTTP-Anfrage oder eine entsprechende Codierung festzulegen.
Bei Anfrage bezieht es sich auf die Kodierung des übermittelten Inhalts. Nach der Angabe können Sie die richtige Zeichenfolge direkt über getParameter() abrufen. Wenn nicht angegeben, wird standardmäßig die Kodierung iso8859-1 verwendet erfordert eine weitere Bearbeitung. Siehe „Formulareingabe“ unten. Es ist zu beachten, dass getParameter() nicht ausgeführt werden kann, bevor setCharacterEncoding() ausgeführt wird. Im Java-Dokument heißt es: Diese Methode muss vor dem Lesen von Anforderungsparametern oder dem Lesen von Eingaben mit getReader() aufgerufen werden. Darüber hinaus gilt diese Spezifikation nur für die POST-Methode, nicht für die GET-Methode. Bei der Analyse des Grundes sollte es so sein, dass Java beim ersten Ausführen von getParameter () den gesamten übermittelten Inhalt gemäß der Codierung analysiert und nachfolgendes getParameter () nicht mehr analysiert wird, sodass setCharacterEncoding () ungültig ist. Damit die GET-Methode das Formular senden kann, befindet sich der übermittelte Inhalt in der URL und der gesamte übermittelte Inhalt wurde von Anfang an gemäß der Codierung analysiert, sodass setCharacterEncoding () natürlich ungültig ist.
Als Antwort wird die Kodierung des Ausgabeinhalts angegeben. Gleichzeitig wird diese Einstellung an den Browser übergeben, um dem Browser mitzuteilen, welche Kodierung für die Ausgabe des Inhalts verwendet wird.
3.4. Verarbeitungsprozess
Im Folgenden finden Sie eine Analyse zweier repräsentativer Beispiele, um zu veranschaulichen, wie Java mit codierungsbezogenen Problemen umgeht.
3.4.1. Formulareingabe
Benutzereingabe *(gbk:d6d0 cec4) Browser *(gbk:d6d0 cec4) Webserver iso8859-1(00d6 00d 000ce 00c4) Klasse, muss in der Klasse verarbeitet werden: getbytes("iso8859-1") ist d6 d0 ce c4, new String("gbk") ist d6d0 cec4 und die Unicode-Codierung im Speicher ist 4e2d 6587.
l Die vom Benutzer eingegebene Codierungsmethode hängt mit der auf der Seite angegebenen Codierung und auch mit dem Betriebssystem des Benutzers zusammen und ist daher unsicher. Das obige Beispiel verwendet gbk als Beispiel.
Vom Browser bis zum Webserver können Sie den Zeichensatz angeben, der beim Senden von Inhalten im Formular verwendet wird. Andernfalls wird die von der Seite angegebene Codierung verwendet. Und wenn die Parameter direkt in der URL mit ? eingegeben werden, ist die Kodierung oft die Kodierung des Betriebssystems selbst, da sie zu diesem Zeitpunkt nichts mit der Seite zu tun hat. Oben wird immer noch die GBK-Codierung als Beispiel verwendet.
Der Webserver empfängt standardmäßig einen Byte-Stream (getParameter), der mit der ISO8859-1-Kodierung verarbeitet wird. Das Ergebnis ist falsch und muss daher verarbeitet werden. Wenn die Codierung jedoch im Voraus festgelegt wird (über request. setCharacterEncoding ()), kann das richtige Ergebnis direkt erhalten werden.
Es ist eine gute Angewohnheit, die Kodierung auf der Seite anzugeben, da Sie sonst möglicherweise die Kontrolle verlieren und nicht die richtige Kodierung angeben können.
Das Obige ist die grundlegende Einführung – detaillierte Erklärung des JAVA-Zeichensatzes. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.org). .php.cn)!