Heim >Backend-Entwicklung >PHP-Tutorial >Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

寻∝梦
寻∝梦Original
2018-08-31 11:22:282733Durchsuche

Wie viel wissen Sie über die Zeichensatzkodierung ASCII, Unicode und UTF-8? Dieser Artikel vermittelt Ihnen ein umfassendes Verständnis der Zeichensatzkodierung. In diesem Artikel werden ASCII-, Unicode- und UTF-8-Codierungsprobleme und -Konvertierungen sowie Beispielanalysen vorgestellt. Beginnen Sie mit dem Lesen des Artikels

1. ASCII-Code

Wir wissen, dass alle Informationen im Computer letztendlich ein binärer Wert sind. Jedes Binärbit (Bit) hat zwei Zustände: 0 und 1, sodass acht Binärbits zu 256 Zuständen zusammengefasst werden können, die als Byte bezeichnet werden. Mit anderen Worten, ein Byte kann verwendet werden, um insgesamt 256 verschiedene Zustände darzustellen, und jeder Zustand entspricht einem Symbol, also 256 Symbolen, von 00000000 bis 11111111.

In den 1960er Jahren formulierten die Vereinigten Staaten eine Reihe von Zeichenkodierungen, die die Beziehung zwischen englischen Zeichen und Binärbits vereinheitlichten. Dies wurde ASCII genannt und wird auch heute noch verwendet.

ASCII-Code gibt insgesamt 128 Zeichenkodierungen an. Beispielsweise ist SPACE 32 (binär 00100000) und der Großbuchstabe A ist 65 (binär 01000001). Diese 128 Symbole (einschließlich 32 Steuersymbole, die nicht gedruckt werden können) belegen nur die letzten 7 Bits eines Bytes, und das erste Bit wird einheitlich auf 0 gesetzt.

ASCII-Steuerzeichen

Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

ASCII-anzeigbare Zeichen

Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

2. Nicht-ASCII-Kodierung

128 Symbole reichen aus, um Englisch zu kodieren, aber 128 Symbole reichen nicht aus, um andere Sprachen darzustellen. Wenn beispielsweise im Französischen phonetische Symbole über Buchstaben stehen, kann dies nicht durch ASCII-Code dargestellt werden. Aus diesem Grund beschlossen einige europäische Länder, die höchsten freien Bits in den Bytes zur Codierung neuer Symbole zu verwenden. Beispielsweise ist die Kodierung für é im Französischen 130 (binär 10000010). Daher kann das in diesen europäischen Ländern verwendete Kodierungssystem bis zu 256 Symbole darstellen.

Hier entsteht jedoch ein neues Problem. Verschiedene Länder haben unterschiedliche Alphabete. Selbst wenn sie alle eine Kodierung mit 256 Symbolen verwenden, sind die Buchstaben, die sie darstellen, unterschiedlich. Beispielsweise steht 130 in der französischen Kodierung für é, in der hebräischen Kodierung für den Buchstaben Gimel (ג) und in der russischen Kodierung für ein anderes Symbol. Aber egal was passiert, bei all diesen Codierungsmethoden sind die durch 0-127 dargestellten Symbole gleich, und der einzige Unterschied ist der Abschnitt 128-255.

Was die Schriftzeichen asiatischer Länder betrifft, so verwenden sie mit bis zu 100.000 chinesischen Schriftzeichen sogar noch mehr Symbole. Ein Byte kann nur 256 Symbole darstellen, was definitiv nicht ausreicht, um ein Symbol auszudrücken. Die gängige Codierungsmethode für vereinfachtes Chinesisch ist beispielsweise GB2312, die zwei Bytes zur Darstellung eines chinesischen Zeichens verwendet, sodass theoretisch bis zu 256 x 256 = 65536 Symbole dargestellt werden können.

Das Problem der chinesischen Kodierung erfordert einen speziellen Artikel, der in diesem Hinweis nicht behandelt wird. Es wird hier nur darauf hingewiesen, dass, obwohl mehrere Bytes zur Darstellung eines Symbols verwendet werden, die chinesische Zeichenkodierung der GB-Klasse nichts mit dem später beschriebenen Unicode und UTF-8 zu tun hat.

3. Unicode

Wie im vorherigen Abschnitt erwähnt, gibt es weltweit mehrere Codierungsmethoden, und dieselbe Binärzahl kann sein in verschiedene Symbole interpretiert. Wenn Sie eine Textdatei öffnen möchten, müssen Sie daher deren Kodierungsmethode kennen. Andernfalls werden verstümmelte Zeichen angezeigt, wenn Sie zur Interpretation die falsche Kodierungsmethode verwenden. Warum werden E-Mails oft verstümmelt? Dies liegt daran, dass Sender und Empfänger unterschiedliche Verschlüsselungsmethoden verwenden.

Es ist denkbar, dass es einen Code gibt, der alle Symbole der Welt enthält. Jedes Symbol erhält einen eindeutigen Code, sodass das Problem des verstümmelten Codes verschwindet. Dies ist, wie der Name schon sagt, Unicode, eine Kodierung aller Symbole.

Unicode ist natürlich eine sehr große Sammlung, die derzeit über 1 Million Symbole umfasst. Die Kodierung jedes Symbols ist unterschiedlich. Beispielsweise steht U+0639 für den arabischen Buchstaben Ain, U+0041 für den englischen Großbuchstaben A und U+4E25 für das chinesische Schriftzeichen Yan. Eine bestimmte Symbolkorrespondenztabelle finden Sie auf unicode.org oder in einer speziellen Korrespondenztabelle für chinesische Schriftzeichen.

4. Probleme mit Unicode

Es ist zu beachten, dass Unicode nur ein Symbolsatz ist und nur den Binärcode des Symbols angibt , aber es gibt keine Angabe, wie dieser Binärcode gespeichert werden soll.

Zum Beispiel ist der Unicode des chinesischen Schriftzeichens Yan die Hexadezimalzahl 4E25, die in eine Binärzahl mit 15 Ziffern umgewandelt wird (100111000100101). Mit anderen Worten: Die Darstellung dieses Symbols erfordert mindestens 2 Bytes . Für die Darstellung anderer größerer Symbole sind möglicherweise 3 Bytes oder 4 Bytes oder sogar mehr erforderlich.

Hier gibt es zwei schwerwiegende Probleme Die erste Frage ist: Wie können wir Unicode und ASCII unterscheiden? Woher weiß der Computer, dass drei Bytes ein Symbol darstellen und nicht drei separate Symbole? Das zweite Problem besteht darin, dass wir bereits wissen, dass nur ein Byte ausreicht, um englische Buchstaben darzustellen. Wenn Unicode einheitlich vorschreibt, dass jedes Symbol durch drei oder vier Bytes dargestellt wird, müssen jedem englischen Buchstaben zwei Zeichen vorangestellt werden. Das stellt eine enorme Speicherverschwendung dar und die Größe der Textdatei wird zwei- oder dreimal so groß sein, was inakzeptabel ist.

Die Ergebnisse, die sie hervorrufen, sind: 1) Es sind mehrere Speichermethoden von Unicode entstanden, was bedeutet, dass es viele verschiedene Binärformate gibt, die zur Darstellung von Unicode verwendet werden können. 2) Unicode konnte bis zum Aufkommen des Internets lange Zeit nicht gefördert werden.

5. UTF-8

Die Popularität des Internets erfordert dringend die Entwicklung einer einheitlichen Kodierungsmethode. UTF-8 ist die am weitesten verbreitete Unicode-Implementierung im Internet. Weitere Implementierungen sind UTF-16 (Zeichen werden durch zwei oder vier Bytes dargestellt) und UTF-32 (Zeichen werden durch vier Bytes dargestellt), diese werden jedoch im Internet selten verwendet. Auch hier besteht der Zusammenhang darin, dass UTF-8 eine Implementierung von Unicode ist.

Eines der größten Merkmale von UTF-8 ist, dass es sich um eine Codierungsmethode mit variabler Länge handelt. Zur Darstellung eines Symbols können 1 bis 4 Bytes verwendet werden, und die Bytelänge variiert je nach Symbol.

Die Kodierungsregeln von UTF-8 sind sehr einfach, es gibt nur zwei:

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

2. Bei n-Byte-Symbolen (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 Folgende Bytes werden auf 0 gesetzt. Bits werden immer auf 10 gesetzt. Die übrigen nicht erwähnten Binärbits sind alle der Unicode-Code dieses Symbols.

Die folgende Tabelle fasst die Kodierungsregeln zusammen, der Buchstabe x gibt die verfügbaren Kodierungsbits an.

Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

Gemäß der obigen Tabelle ist die Interpretation der UTF-8-Codierung sehr einfach. Wenn das erste Bit eines Bytes 0 ist, dann ist das Byte allein ein Zeichen; wenn das erste Bit 1 ist, gibt die Anzahl der aufeinanderfolgenden Einsen an, wie viele Bytes das aktuelle Zeichen belegt.

Als nächstes nehmen wir das chinesische Schriftzeichen Yan als Beispiel, um zu demonstrieren, wie die UTF-8-Codierung implementiert wird.

Yans Unicode ist 4E25 (100111000100101). Gemäß der obigen Tabelle kann festgestellt werden, dass 4E25 im Bereich der dritten Zeile liegt (0000 0800 - 0000 FFFF), also Yans UTF-8 Die Codierung erfordert drei Bytes, das heißt, das Format ist 1110xxxx 10xxxxxx 10xxxxxx. Füllen Sie dann, beginnend mit der letzten Binärziffer von Yan, 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 Yans UTF-8-Kodierung 11100100 10111000 10100101 ist, was in Hexadezimal umgewandelt E4B8A5 ist.

6. Konvertierung zwischen Unicode und UTF-8

Anhand des Beispiels im vorherigen Abschnitt können Sie sehen, dass Yans Unicode-Code 4E25 ist Die UTF-8-Codierung ist E4B8A5, die beiden sind unterschiedlich. Die Konvertierung zwischen ihnen kann durch Programme erreicht werden.

Für die Windows-Plattform ist eine der einfachsten Konvertierungsmethoden die Verwendung des integrierten Notepad-Applets notepad.exe. Nachdem Sie die Datei geöffnet haben, klicken Sie im Menü „Datei“ auf den Befehl „Speichern unter“. Daraufhin wird ein Dialogfeld mit einer Dropdown-Leiste für die Codierung unten angezeigt.

Wie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung)

Es gibt vier Optionen: ANSI, Unicode, Unicode Big Endian und UTF-8.

  • ANSI ist die Standardkodierung. Bei englischen Dateien handelt es sich um die ASCII-Kodierung und bei vereinfachten chinesischen Dateien um die GB2312-Kodierung (nur für die Windows-Version für vereinfachtes Chinesisch; wenn es sich um eine traditionelle chinesische Version handelt, wird Big5-Code verwendet).

  • Unicode-Kodierung bezieht sich hier auf die von notepad.exe verwendete UCS-2-Kodierungsmethode, die direkt zwei Bytes zum Speichern des Unicode-Codes des Zeichens verwendet. Diese Option verwendet das Little-Endian-Format . .

  • Unicode-Big-Endian-Kodierung entspricht der vorherigen Option. Die Bedeutung von Little Endian und Big Endian erkläre ich im nächsten Abschnitt.

  • UTF-8-Kodierung, die im vorherigen Abschnitt besprochene Kodierungsmethode.

Nachdem Sie die „Kodierungsmethode“ ausgewählt haben, klicken Sie auf die Schaltfläche „Speichern“, und die Kodierungsmethode der Datei wird sofort konvertiert.

7. Little Endian und Big Endian

Wie im vorherigen Abschnitt erwähnt, kann das UCS-2-Format Unicode-Codes speichern (Codepunkte sind nicht gleich) überschreitet 0xFFFF). Am Beispiel des chinesischen Schriftzeichens Yan lautet der Unicode-Code 4E25 und muss in zwei Bytes gespeichert werden, ein Byte ist 4E und das andere Byte ist 25. Beim Speichern befindet sich 4E vorne und 25 hinten, was der Big-Endian-Methode entspricht; 25 ist vorne und 4E hinten, was der Little-Endian-Methode entspricht.

Diese beiden seltsamen Namen stammen aus „Gullivers Reisen“ des britischen Schriftstellers Swift. In dem Buch brach in Liliput ein Bürgerkrieg aus. Die Ursache des Krieges war der Streit der Menschen darüber, ob Eier aus dem Big-Endian- oder Little-Endian-Verfahren aufgeschlagen werden sollten. Aufgrund dieses Vorfalls brachen sechs Kriege aus, ein Kaiser verlor sein Leben und ein anderer Kaiser verlor seinen Thron.

Das erste Byte kommt zuerst, das ist „Big Endian“, und das zweite Byte kommt zuerst, das ist „Little Endian“.

Da stellt sich natürlich die Frage: Woher weiß der Computer, welche Kodierungsmethode für eine bestimmte Datei verwendet wird?

Die Unicode-Spezifikation definiert, dass am Anfang jeder Datei ein Zeichen hinzugefügt wird, das die Kodierungssequenz angibt. Der Name dieses Zeichens wird als „No-Break-Leerzeichen mit Nullbreite“ bezeichnet. vertreten durch FEFF. 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-End-Modus verwendet. Wenn die ersten beiden Bytes FF FE sind, bedeutet dies, dass die Datei den Small-End-Modus verwendet.

8. Beispiel

Das Folgende ist ein Beispiel.

Öffnen Sie das „Notepad“-Programm notepad.exe, erstellen Sie eine neue Textdatei, deren Inhalt das Wort „yan“ ist, und speichern Sie sie in den Kodierungen ANSI, Unicode, Unicode Big Endian und UTF-8.

Verwenden Sie dann die „Hex-Funktion“ in der Textbearbeitungssoftware UltraEdit, um die interne Kodierung der Datei zu beobachten.

  • ANSI: Die Codierung der Datei beträgt zwei Bytes D1 CF, was Yans GB2312-Codierung ist, was auch bedeutet, dass GB2312 im Big-Head-Modus gespeichert wird.

  • Unicode: Die Codierung ist vier Bytes FF FE 25 4E, wobei FF FE angibt, dass es im Little-Endian-Modus gespeichert ist, und die tatsächliche Codierung 4E25 ist.

  • Unicode Big Endian: Die Codierung beträgt vier Bytes FE FF 4E 25, wobei FE FF Big End Storage angibt.

  • 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 sind es E4B8A5. Die spezifische Codierung von Yan stimmt mit der Codierungsreihenfolge überein.

9. Erweiterte Lektüre (außerschulisches Wissen)

Das absolute Minimum, über das jeder Softwareentwickler unbedingt Bescheid wissen muss Unicode und Zeichensätze (das grundlegendste Wissen über Zeichensätze)

Sprechen Sie über die Unicode-Kodierung: RFC3629: UTF-8, ein Transformationsformat von ISO 10646 (sofern die Vorschriften von UTF-8 implementiert sind)

Das obige ist der detaillierte Inhalt vonWie viel wissen Sie über die Zeichensatzkodierungen ASCII, Unicode und UTF-8? Zusammenfassung der Zeichensatzkodierung (Sammlung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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