UTF-8: Unicode TransformationFormat-8bit, BOM ist erlaubt, aber die BOM ist normalerweise nicht enthalten. Es handelt sich um eine Multi-Byte-Kodierung, die zur Lösung internationaler Charaktere verwendet wird. UTF-8 enthält Charaktere, die von allen Ländern der Welt verwendet werden. Der UTF-8-codierte Text kann in Browsern in verschiedenen Ländern angezeigt werden, die den UTF8-Zeichensatz unterstützen. Wenn es sich beispielsweise um UTF8 -Codierung handelt, können Chinese auch auf dem englischen IE von Ausländern angezeigt werden, und sie müssen nicht das chinesische Unterstützungspaket von IE herunterladen.
GBK ist ein Standard, der auf dem nationalen Standard GB2312 basiert und um mit GB2312 kompatibel ist. Die Textcodierung von GBK wird durch Doppelbytes dargestellt, dh sowohl chinesische als auch englische Zeichen werden durch Doppelbytes dargestellt, um chinesische Zeichen zu unterscheiden, die höchsten Bits sind auf 1 eingestellt. GBK enthält alle chinesischen Charaktere und ist eine nationale Kodierung.
GBK, GB2312 usw. muss durch Unicode -Codierung in UTF8 konvertiert werden:
GBK, GB2312-Unicode-UTF8
UTF8-Unicode-GBK, GB2312
Bei einer Website oder einem Forum wird empfohlen, UTF-8 zu verwenden, um Platz zu sparen. Viele Forum-Plug-Ins unterstützen jedoch im Allgemeinen nur GBK.
Detaillierte Erläuterung des Unterschieds zwischen Codings. Die vorherigen drei Codes sind kompatibel. Zum Beispiel unterscheidet sich der UNCODE-Wert von "Han" von GBK. Der UTF-8-Code ist nur für Uncodes organisiert.
Weitere Informationen finden Sie im nach unten gedruckten Artikel.
Sprechen wir über Unicode -Codierung und erklären Sie kurz die Begriffe wie UCS, UTF, BMP und BOM. Der sogenannte Spaß bedeutet, dass Sie einige bisher unklare Konzepte leicht verstehen und Ihr Wissen verbessern können, was dem Upgrade in einem RPG-Spiel ähnlich ist. Die Motivation für die Organisation dieses Artikels sind zwei Fragen:
Frage eins:
Mit "Speichern als" im Windows-Notepad können Sie zwischen GBK, Unicode, Unicode Big Endian und UTF-8-Codierungsmethoden konvertieren. Oder Sie können direkt zu http://www.knowsky.com/tools/utf8.asp für Online -Conversion gehen.
Es ist auch eine TXT -Datei.
Ich habe schon lange entdeckt (UTF-8). Aber auf welchen Kriterien basieren diese Marker?
Frage zwei:
Kürzlich habe ich Convertutf.c im Internet gesehen, was die gegenseitige Konvertierung von UTF-32, UTF-16 und UTF-8 erkennt. Ich weiß bereits über Codierungsmethoden wie Unicode (UCS2), GBK und UTF-8. Aber dieses Programm macht mich ein wenig verwirrt, und ich kann mich nicht erinnern, was die Beziehung zwischen UTF-16 und UCS2 ist.
Nachdem ich die relevanten Informationen überprüft hatte, habe ich diese Probleme schließlich klargestellt und auch einige Details zu Unicode gelernt. Schreiben Sie einen Artikel und senden Sie ihn an Freunde, die ähnliche Fragen haben. Dieser Artikel ist so leicht wie möglich zu verstehen, aber die Leser müssen wissen, was Bytes sind und was Hexadezimal ist.
0. Big Endian und Little Endian
Big Endian und Little Endian sind unterschiedliche Methoden, mit denen die CPU Multibyte-Zahlen verarbeitet. Beispielsweise ist die Unicode-Kodierung des Zeichens „汉“ 6C49. Sollte beim Schreiben in eine Datei also 6C vorne oder 49 vorne geschrieben werden? Wenn 6C vorne steht, handelt es sich um Big Endian. Wenn 49 vor sich geschrieben sind, ist es wenig Endian.
Das Wort „Endian“ stammt aus „Gullivers Reisen“. Der Bürgerkrieg in Lilliput wurde dadurch verursacht, ob die Eier aus dem Big-Endian oder dem Little-Endian geknackt wurden.
Wir übersetzen Endian im Allgemeinen als „Bytereihenfolge“, und Big Endian und Little Endian werden als „Big End“ und „Little End“ bezeichnet.
1. Zeichenkodierung und interner Code Chinesische Zeichen müssen übrigens kodiert werden, bevor sie vom Computer verarbeitet werden können. Die vom Computer verwendete Standardcodierungsmethode ist der interne Code des Computers. Frühe Computer nutzten die 7-Bit-ASCII-Kodierung, um chinesische Zeichen zu verarbeiten. Programmierer entwickelten GB2312 für vereinfachtes Chinesisch und big5 für traditionelles Chinesisch.
RFC2781 und RFC3629 der IETF beschreiben die Kodierungsmethoden von UTF-16 und UTF-8 klar, klar und präzise im einheitlichen RFC-Stil. Ich vergesse immer, dass IETF die Abkürzung für Internet Engineering Task Force ist. Der von der IETF gepflegte RFC ist jedoch die Grundlage für alle Spezifikationen im Internet.
2.1.
Derzeit unterstützt der Windows -Kernel den Unicode -Charakter -Satz bereits, damit der Kernel alle Sprachen der Welt unterstützen kann. Da jedoch eine große Anzahl vorhandener Programme und Dokumente eine bestimmte Sprachcodierung wie GBK verwenden, ist es für Windows unmöglich, die vorhandene Codierung nicht zu unterstützen und alle Unicode zu verwenden.
Windows verwendet Codeseiten, um sich an verschiedene Länder und Regionen anzupassen. Die Code -Seite kann als der zuvor erwähnte interne Code verstanden werden. Die Codeseite, die GBK entspricht, ist CP936.
Microsoft definiert auch eine Codeseite für GB18030: CP54936. Da GB18030 jedoch über 4-Byte-Codierungen verfügt und die Windows-Code-Seite nur Einzel- und Doppel-Byte-Codierungen unterstützt, kann diese Code-Seite nicht wirklich verwendet werden.
3. UCS-2, UCS-4, BMP
UCS gibt es in zwei Formaten: UCS-2 und UCS-4. Wie der Name schon sagt, ist UCS-2 mit zwei Bytes kodiert und UCS-4 mit 4 Bytes (tatsächlich werden nur 31 Bits verwendet, das höchste Bit muss 0 sein). Lass uns ein paar einfache Mathe-Spiele machen:
UCS-2 hat 2^16=65536 Codepunkte und UCS-4 hat 2^31=2147483648 Codepunkte.
UCS-4 ist entsprechend dem höchsten Byte in 2^7=128 Gruppen unterteilt, wobei das höchste Bit 0 ist. Jede Gruppe ist basierend auf dem nächsthöheren Byte in 256 Ebenen unterteilt. Jede Ebene ist entsprechend dem dritten Byte in 256 Zeilen unterteilt, und jede Zeile enthält 256 Zellen. Natürlich unterscheiden sich Zellen in derselben Zeile nur im letzten Byte, der Rest ist gleich.
Ebene 0 der Gruppe 0 wird als Basic Multilingual Plane oder BMP bezeichnet. Oder in UCS-4 werden die Codebits, bei denen die oberen beiden Bytes 0 sind, als BMP bezeichnet.
UCS-2 wird durch Entfernen der ersten beiden Nullbytes des BMP von UCS-4 erhalten. Fügen Sie vor den beiden Bytes von UCS-2 zwei Nullbytes hinzu, um den BMP von UCS-4 zu erhalten. In der aktuellen UCS-4-Spezifikation werden keine Zeichen außerhalb des BMP zugewiesen.
4. UTF -Codierung
UTF-8 codiert UCs in 8-Bit-Einheiten. Die Kodierung von UCS-2 nach UTF-8 ist wie folgt:
UCS-2-Kodierung (hexadezimal) UTF-8-Byte-Stream (binär)
0000-007F 0xxxxxxx
0080-07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
Beispielsweise beträgt die Unicode-Codierung von "Chinesisch" 6C49. Das Schreiben von 6C49 in Binary ist: 0110 110001 001001. Verwenden dieses Bitstroms, um X in der Vorlage zu ersetzen.
Leser können Notepad verwenden, um zu testen, ob unsere Codierung korrekt ist. Es ist zu beachten, dass UltraEdit beim Öffnen einer UTF-8-codierten Textdatei automatisch in UTF-16 konvertiert wird, was zu Verwirrung führen kann. Sie können diese Option in Einstellungen ausschalten. Ein besseres Werkzeug ist der Hex -Workshop.
UTF-16 kodiert UCS in 16-Bit-Einheiten. Für UCS-Codes kleiner als 0x10000 entspricht die UTF-16-Codierung der 16-Bit-Ganzzahl ohne Vorzeichen, die dem UCS-Code entspricht. Für UCS-Codes nicht kleiner als 0x10000 ist ein Algorithmus definiert. Da jedoch der BMP des tatsächlich verwendeten UCS2 oder UCS4 kleiner als 0x10000 sein muss, kann vorerst davon ausgegangen werden, dass UTF-16 und UCS-2 grundsätzlich gleich sind. Allerdings handelt es sich bei UCS-2 nur um ein Codierungsschema, und für die eigentliche Übertragung wird UTF-16 verwendet, sodass die Frage der Bytereihenfolge berücksichtigt werden muss.
5. UTF Byte Order und Bom
UTF-8 verwendet Bytes als Codierungseinheit und hat keine Endianess-Probleme. UTF-16 verwendet zwei Bytes als Kodierungseinheit. Bevor Sie einen UTF-16-Text interpretieren, müssen Sie zunächst die Bytereihenfolge jeder Kodierungseinheit verstehen. Zum Beispiel beträgt die Unicode -Codierung von "kui" 594E und die Unicode -Codierung von "B" 4E59. Wenn wir den UTF-16-Byte-Stream „594E“ empfangen, ist das „Ku“ oder „B“?
Die empfohlene Methode zum Markieren der Bytereihenfolge in der Unicode-Spezifikation ist die Stückliste. BOM ist nicht die BOM -Liste der "Materialkarten", sondern die Byte -Bestellmarke. BOM ist eine kleine clevere Idee:
In der UCS-Codierung gibt es einen Charakter, der als "Null-Breiten-No-Breakspace" bezeichnet wird, und seine Codierung ist feff. FFFE ist ein Zeichen, das in UCS nicht existiert und daher in der tatsächlichen Übertragung nicht erscheinen sollte. Die UCS-Spezifikation empfiehlt, dass wir vor der Übertragung des Bytestreams die Zeichen „ZERO WIDTH NO-BREAK SPACE“ übertragen.
Wenn der Empfänger FEFF empfängt, zeigt er auf diese Weise an, dass der Bytestrom Big-Endian ist. Wenn er FFFE empfängt, zeigt er an, dass der Bytestrom Little-Endian ist. Daher wird das Zeichen „ZERO WIDTH NO-BREAK SPACE“ auch BOM genannt.
UTF-8 erfordert keine BOM zur Angabe der Bytereihenfolge, kann jedoch die BOM zur Angabe der Codierungsmethode verwenden. Die UTF-8-Codierung des Zeichens "Null-Breite No-Breakspace" ist EF BB BF (Leser können es mit der zuvor eingeführten Codierungsmethode überprüfen). Wenn der Empfänger einen Byte-Stream erhält, der mit EF BBBF beginnt, weiß er, dass er UTF-8 codiert ist.
Windows verwendet BOM, um die Kodierung von Textdateien zu markieren.
6. Weitere Referenzmaterialien Das Hauptreferenzmaterial für diesen Artikel ist „Kurzer Überblick über ISO-IEC 10646 und Unicode“ ( http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html ).
Ich habe auch zwei Informationen gefunden, die gut aussahen, aber weil ich bereits die Antworten auf meine ersten Fragen hatte, habe ich sie nicht gelesen:
„Unicode verstehen Eine allgemeine Einführung in den Unicode-Standard“ ( http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a )
„Grundlagen der Zeichensatzkodierung Grundlegendes zu Zeichensatzkodierungen und Legacy-Kodierungen“ ( http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03 )
Ich habe Softwarepakete zum Konvertieren von UTF-8, UCS-2 und GBK ineinander und voneinander geschrieben, einschließlich Versionen, die die Windows-API verwenden, und Versionen, die die Windows-API nicht verwenden. Wenn ich in Zukunft Zeit habe, werde ich es klären und auf meiner persönlichen Homepage ( http://fmddlmyy.home4u.china.com ) veröffentlichen.
Nachdem ich alle Themen durchgedacht hatte, begann ich mit dem Schreiben dieses Artikels. Ich dachte, ich könnte ihn in einer Weile fertigstellen. Unerwarteterweise dauerte es lange, über den Wortlaut nachzudenken und die Details zu überprüfen, und ich schrieb es von 13:30 bis 21:00 Uhr nachmittags. Ich hoffe, dass einige Leser davon profitieren können.
Anhang 1 Sprechen wir über den Standortcode, GB2312, interne Code und Code.
"Der ursprüngliche Text von GB2312 ist immer noch der Vorwahlcode. Von der Vorwahl zum inneren Code müssen Sie A0 zum hohen Byte bzw. dem niedrigen Byte hinzufügen."
Lassen Sie es mich im Detail erklären:
"Der Originaltext von GB2312" bezieht sich auf einen nationalen Standard im Jahr 1980, "grundlegende Reihe chinesischer Codier-Charaktere für den nationalen Standardinformationsaustausch der Volksrepublik China GB2312-80". Dieser Standard verwendet zwei Zahlen, um chinesische Zeichen und chinesische Symbole zu codieren. Die erste Zahl heißt "Bereich" und die zweite Zahl wird als "Bit" bezeichnet. Es wird also auch als Standortcode bezeichnet. Die Gebiete 1-9 sind chinesische Symbole, die Gebiete 16-55 sind chinesische Charaktere erster und die Gebiete 56-87 sind chinesische Zeichen der zweiten Ebene. Jetzt verfügt Windows auch über eine Standorteingangsmethode, z. B. Eingabe 1601, um "AH" zu erhalten. (Diese Standorteingangsmethode kann automatisch die hexadezimalen GB2312- und Dezimalort -Standortcodes erkennen, was bedeutet, dass das Eingeben von B0A1 auch "Ah" erhält.)
Der interne Code bezieht sich auf die Zeichencodierung im Betriebssystem. Der interne Kodex der frühen Betriebssysteme war sprachabhängig. Das heutige Windows unterstützt Unicode innerhalb des Systems und verwendet dann Code -Seiten, um sich an verschiedene Sprachen anzupassen. Microsoft bezieht sich im Allgemeinen auf die von der Standardcodeseite als interne Code angegebene Codierung.
Es gibt keine offizielle Definition des Begriffs interner Code, und die Code -Seite ist nur der Name des Unternehmens Microsoft. Solange wir wissen, was sie sind, müssen diese Begriffe nicht zu sehr untersucht werden.
Die sogenannte Codeseite (Code-Seite) ist die Zeichencodierung für eine Sprache. Beispielsweise lautet die Codeseite von GBK CP936, die Codeseite von Big5 ist CP950 und die Codeseite von GB2312 ist CP20936.
Windows hat das Konzept einer Standard -Code -Seite, dh, welche Codierung standardmäßig zum Interpretieren von Zeichen verwendet wird. Zum Beispiel öffnet Windows Notepad eine Textdatei, und der Inhalt im Inhalt ist ein Byte -Stream: BA, BA, D7, D6. Wie sollte Windows es interpretieren?
Sollte es in Übereinstimmung mit Unicode-Codierung, GBK, Big5 oder ISO8859-1 interpretiert werden? Wenn Sie es nach GBK interpretieren, erhalten Sie das Wort "chinesische Zeichen". Nach anderen Codierungsinterpretationen kann das entsprechende Zeichen nicht gefunden werden oder der falsche Charakter kann gefunden werden. Der sogenannte "Fehler" bedeutet, dass er mit der ursprünglichen Absicht des Textautors nicht übereinstimmt, und verstümmelte Zeichen werden erzeugt.
Die Antwort ist, dass Windows den Byte -Stream in der Textdatei entsprechend der aktuellen Standard -Code -Seite interpretiert. Die Standard -Code -Seite kann über die regionalen Optionen im Bedienfeld eingestellt werden. Es gibt ein ANSI -Element in Notepad's Save As, das tatsächlich entsprechend der Codierungsmethode der Standardcode -Seite speichert.
Der interne Windows -Code ist Unicode, mit dem mehrere Codeseiten gleichzeitig technisch unterstützt werden können. Solange die Datei erklären kann, welche Codierung sie verwendet und der Benutzer die entsprechende Codeseite installiert hat, kann Windows sie korrekt anzeigen.
Einige HTML -Dateiautoren, insbesondere englische Autoren, glauben, dass jeder auf der Welt Englisch verwendet und Charset in der Datei nicht angeben. Wenn er Zeichen zwischen 0x80-0xff verwendet und chinesische Windows sie nach dem Standard-GBK interpretiert, werden verstümmelte Zeichen angezeigt. Fügen Sie zu diesem Zeitpunkt einfach die Anweisung hinzu, die Charset in der HTML -Datei angeben kann, z. B.:
<meta http-äquiv = "content-type" content = "text/html; charset = iso8859-1">
Wenn die vom ursprünglichen Autor verwendete Codeseite mit ISO8859-1 kompatibel ist, gibt es keine verstümmelten Zeichen.
Lassen Sie uns über den Standortcode von AH sprechen. Dies widerspricht der ASCII, die von Computern weit verbreitet ist. Um mit der ASCII-Codierung von 00-7F kompatibel zu sein, fügen wir A0 zu den hohen bzw. niedrigen Bytes der Vorwahl hinzu. Auf diese Weise wird der Code für "Ah" B0A1. Wir nennen die Codierung auch mit zwei A0S als GB2312 -Codierung hinzu, obwohl der ursprüngliche Text von GB2312 dies überhaupt nicht erwähnt.