Ich bin verwirrt über die Textcodierung und den Zeichensatz. Aus vielen Gründen muss ich in meiner bevorstehenden Arbeit Nicht-Unicode- und Nicht-UTF8-Inhalte lernen.
Ich finde das Wort "Zeichensatz" in E-Mail-Headern wie in "ISO-2022-JP", aber es gibt keine solche Codierung in Texteditoren. (Ich habe mich in den verschiedenen Texteditoren umgesehen.)
Was ist der Unterschied zwischen Textcodierung und Zeichensatz? Ich würde mich freuen, wenn Sie mir einige Anwendungsbeispiele zeigen könnten.
Antworten:
Grundsätzlich:
quelle
Jeder Codierung ist ein bestimmter Zeichensatz zugeordnet, es kann jedoch mehr als eine Codierung für einen bestimmten Zeichensatz geben. Ein Zeichensatz ist einfach das, wonach er sich anhört, eine Reihe von Zeichen. Es gibt eine große Anzahl von Zeichensätzen, darunter viele, die für bestimmte Skripte oder Sprachen vorgesehen sind.
Wir sind jedoch auf dem besten Weg zum Übergang zu Unicode, das einen Zeichensatz enthält, der fast alle Skripte der Welt darstellen kann. Es gibt jedoch mehrere Codierungen für Unicode. Eine Codierung ist eine Möglichkeit, eine Zeichenfolge einer Zeichenfolge von Bytes zuzuordnen. Beispiele für Unicode-Codierungen umfassen UTF-8 , UTF-16 BE und UTF-16 LE . Jedes davon hat Vorteile für bestimmte Anwendungen oder Maschinenarchitekturen.
quelle
Zusätzlich zu den anderen Antworten denke ich, dass dieser Artikel eine gute Lektüre ist http://www.joelonsoftware.com/articles/Unicode.html
Der Artikel trägt den Titel " Das absolute Minimum, das jeder Softwareentwickler unbedingt über Unicode und Zeichensätze wissen muss (keine Ausreden!) ", Geschrieben von Joel Spolsky . Der Aufsatz ist mehr als 10 Jahre alt, aber (leider) ist der Inhalt noch gültig ...
quelle
Eine Zeichenkodierung besteht aus:
Schritt 1 an sich ist ein "Zeichenrepertoire" oder ein abstrakter "Zeichensatz", und # 1 + # 2 = ein "codierter Zeichensatz".
Doch bevor Unicode populär wurde und alle (außer Ostasiaten) eine Einzelbyte-Codierung verwendeten, waren die Schritte 3 und 4 trivial (Codepunkt = Codeeinheit = Byte). Daher unterschieden ältere Protokolle nicht klar zwischen "Zeichenkodierung" und "codiertem Zeichensatz". Ältere Protokolle werden verwendet,
charset
wenn sie wirklich Codierung bedeuten.quelle
Es wäre hoffentlich hilfreich, mehr Licht für die Besucher zu werfen.
Zeichensatz
In jeder Sprache gibt es Zeichen, und die Sammlung dieser Zeichen bildet den „Zeichensatz“ dieser Sprache. Wenn ein Zeichen codiert ist, wird ihm eine eindeutige Kennung oder eine Nummer zugewiesen, die als Codepunkt bezeichnet wird. Im Computer werden diese Codepunkte durch ein oder mehrere Bytes dargestellt.
Beispiele für Zeichensätze: ASCII (deckt alle englischen Zeichen ab), ISO / IEC 646, Unicode (deckt Zeichen aus allen lebenden Sprachen der Welt ab)
Codierter Zeichensatz
Ein codierter Zeichensatz ist ein Satz, in dem jedem Zeichen eine eindeutige Nummer zugewiesen wird. Diese eindeutige Nummer wird als "Codepunkt" bezeichnet.
Codierte Zeichensätze werden manchmal als Codepages bezeichnet.
Codierung
Die Codierung ist der Mechanismus zum Zuordnen der Codepunkte mit einigen Bytes, sodass ein Zeichen unter Verwendung desselben Codierungsschemas über verschiedene Systeme hinweg einheitlich gelesen und geschrieben werden kann.
Beispiele für die Codierung: ASCII-, Unicode-Codierungsschemata wie UTF-8, UTF-16, UTF-32.
Ausarbeitung der oben genannten 3 Konzepte
09 15
) , wenn die Verwendung von UTF-16 - CodierungFC
während es in „UTF-8“ alsC3 BC
und in UTF-16 als dargestellt wirdFE FF 00 FC
.09 15
) durch zwei Bytes , mit UTF-8 (E0 A4 95
) durch drei Bytes oder mit UTF-32 durch vier Bytes dargestellt (00 00 09 15
)quelle
Ein Zeichensatz oder ein Zeichenrepertoire ist einfach ein Satz (eine ungeordnete Sammlung) von Zeichen. Ein codierter Zeichensatz weist jedem Zeichen im Repertoire eine Ganzzahl (einen "Codepunkt") zu. Eine Codierung ist eine Möglichkeit, Codepunkte eindeutig als Bytestrom darzustellen.
quelle
Googelte danach. http://en.wikipedia.org/wiki/Character_encoding
Der Unterschied scheint subtil zu sein. Der Begriff Zeichensatz gilt eigentlich nicht für Unicode. Unicode durchläuft eine Reihe von Abstraktionen. abstrakte Zeichen -> Codepunkte -> Codierung von Codepunkten in Bytes.
Zeichensätze überspringen dies tatsächlich und springen direkt von Zeichen zu Bytes. Folge von Bytes <-> Folge von Zeichen
Kurz gesagt, Codierung: Codepunkte -> Bytes Zeichensatz: Zeichen -> Bytes
quelle
Ein Zeichensatz ist nur ein Satz; es enthält entweder das Euro-Zeichen oder nicht. Das ist alles.
Eine Codierung ist eine bijektive Zuordnung von einem Zeichensatz zu einem Satz von Ganzzahlen. Wenn es das Euro-Zeichen unterstützt, muss es diesem Zeichen und keinem anderen eine bestimmte Ganzzahl zuweisen.
quelle
Meiner Meinung nach ist ein Zeichensatz Teil einer Codierung (einer Komponente). Die Codierung hat ein Zeichensatzattribut, sodass ein Zeichensatz in vielen Codierungen verwendet werden kann. Zum Beispiel ist Unicode ein Zeichensatz, der in Codierungen wie UTF-8, UTF-16 usw. verwendet wird. Siehe Abbildung hier:
Das Zeichen in Zeichensatz bedeutet nicht den Zeichentyp in der Programmierwelt, es bedeutet ein Zeichen in der realen Welt, in Englisch ist es vielleicht dasselbe, aber in anderen Sprachen ist '我' kein untrennbares 'Zeichen' in Zeichensätzen (UNICODE, GB [verwendet in GBK und GB2312]), 'a' ist auch ein Zeichen in Zeichensätzen (ASCII, ISO-8859 , UNICODE).
quelle
Meiner Meinung nach sollte sich das Wort "Zeichensatz" darauf beschränken, den in HTTP, MIME und ähnlichen Standards verwendeten Parameter zu identifizieren, um eine Zeichenkodierung (eine Zuordnung von einer Reihe von Textzeichen zu einer Folge von Bytes) nach Namen anzugeben. Zum Beispiel :
charset=utf-8
.Mir ist jedoch bewusst, dass MySQL, Java und andere Orte das Wort "Zeichensatz" verwenden können, um eine Zeichenkodierung zu bedeuten.
quelle
Eine Codierung ist eine Zuordnung zwischen Bytes und Zeichen aus einem Zeichensatz. Daher ist es hilfreich, den Unterschied zwischen Bytes und Zeichen zu diskutieren und zu verstehen .
Stellen Sie sich Bytes als Zahlen zwischen 0 und 255 vor, während Zeichen abstrakte Dinge wie "a", "1", "$" und "Ä" sind. Der Satz aller verfügbaren Zeichen wird als Zeichensatz bezeichnet .
Jedes Zeichen hat eine Folge von einem oder mehreren Bytes, die zur Darstellung verwendet werden. Die genaue Anzahl und der genaue Wert der Bytes hängen jedoch von der verwendeten Codierung ab , und es gibt viele verschiedene Codierungen.
Die meisten Codierungen basieren auf einem alten Zeichensatz und einer Codierung namens ASCII, die ein einzelnes Byte pro Zeichen (tatsächlich nur 7 Bit) ist und 128 Zeichen enthält, einschließlich vieler der im US-Englisch verwendeten allgemeinen Zeichen.
Hier sind beispielsweise 6 Zeichen im ASCII-Zeichensatz, die durch die Werte 60 bis 65 dargestellt werden.
Im vollständigen ASCII-Satz ist der niedrigste verwendete Wert Null und der höchste 127 (beide sind versteckte Steuerzeichen).
Sobald Sie jedoch mehr Zeichen benötigen, als das grundlegende ASCII bereitstellt (z. B. Buchstaben mit Akzenten, Währungssymbolen, Grafiksymbolen usw.), ist ASCII nicht mehr geeignet und Sie benötigen etwas umfangreicheres. Sie benötigen mehr Zeichen (einen anderen Zeichensatz) und eine andere Codierung, da 128 Zeichen nicht ausreichen, um alle Zeichen aufzunehmen. Einige Codierungen bieten ein Byte (256 Zeichen) oder bis zu sechs Bytes.
Im Laufe der Zeit wurden viele Codierungen erstellt. In der Windows-Welt gibt es CP1252 oder ISO-8859-1, während Linux-Benutzer UTF-8 bevorzugen. Java verwendet UTF-16 nativ.
Eine Folge von Bytewerten für ein Zeichen in einer Codierung kann für ein völlig anderes Zeichen in einer anderen Codierung stehen oder sogar ungültig sein.
In ISO 8859-1 wird â beispielsweise durch ein Byte Wert dargestellt
226
, während es in UTF-8 zwei Bytes sind :195, 162
. Doch in ISO 8859-1 ,195, 162
würden zwei Zeichen lang sein, Ã, ¢ .Wenn Computer Daten über Zeichen intern speichern oder an ein anderes System übertragen, speichern oder senden sie Bytes. Stellen Sie sich vor, ein System, das eine Datei öffnet oder eine Nachricht empfängt, sieht die Bytes
195, 162
. Woher weiß es, welche Charaktere das sind?Damit das System diese Bytes als tatsächliche Zeichen interpretieren (und sie so anzeigen oder in eine andere Codierung konvertieren kann), muss es die verwendete Codierung kennen. Aus diesem Grund wird die Codierung in XML-Headern angezeigt oder kann in einem Texteditor angegeben werden. Es teilt dem System die Zuordnung zwischen Bytes und Zeichen mit.
quelle