Wie viele Bytes braucht ein Unicode-Zeichen?
Ich bin ein bisschen verwirrt über die Kodierungen. Soweit ich weiß, alte ASCII-Zeichen nahm ein byte pro Zeichen. Wie viele bytes hat ein Unicode-Zeichen erfordern?
Ich gehe davon aus, dass ein Unicode-Zeichen enthalten kann, die alle möglichen Zeichen aus jeder Sprache - bin ich richtig? Also, wie viele bytes braucht es pro Charakter?
Und was tun, UTF-7, UTF-6, UTF-16 usw. bedeuten? Sie sind verschiedene Versionen von Unicode?
Lese ich die Wikipedia-Artikel über Unicode aber es ist ganz schwierig für mich. Ich freue mich zu sehen, eine einfache Antwort.
InformationsquelleAutor der Frage nan | 2011-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Sie nicht eine einfache Antwort, weil es nicht ein.
Ersten, die Unicode nicht enthalten "jedes Zeichen aus jeder Sprache", obwohl es sicher nicht versuchen.
Unicode selbst ist ein mapping definiert, codepoints und ein codepoint ist eine Zahl, verbunden mit in der Regel ein Zeichen. Ich sage meist, weil es gibt Konzepte, wie die Kombination von Zeichen. Sie möglicherweise nicht vertraut mit Dingen wie Akzente oder Umlaute. Diese können verwendet werden, mit einem anderen Charakter, wie ein
a
oder eineu
zum erstellen eines neuen logischen Charakter. Ein Charakter kann daher bestehen aus 1 oder mehrere codepoints.Nützlich zu sein in computing-Systemen, die wir brauchen, um wählen Sie eine Darstellung für diese Informationen. Das sind die verschiedenen unicode-Codierungen wie utf-8, utf-16le, utf-32 usw. Sie zeichnen sich weitgehend durch die Größe Ihrer codeunits. UTF-32 ist die einfachste Codierung, hat es eine codeunit, 32-bit, was bedeutet, dass ein einzelner codepoint passt bequem in eine codeunit. Die anderen Codierungen wird in Situationen, in denen ein codepoint wird, müssen mehrere codeunits, oder, dass insbesondere codepoint können nicht dargestellt werden in der Kodierung (dies ist ein problem, zum Beispiel mit UCS-2).
Weil Sie die Flexibilität der Kombination von Zeichen, auch innerhalb einer bestimmten Kodierung der Anzahl der bytes pro Zeichen kann variieren, je nach dem Charakter und der normalization form. Dies ist ein Protokoll für den Umgang mit Zeichen, die mehr als eine Darstellung (man kann sagen
"an 'a' with an accent"
2 codepoints, eine davon ist eine Kombination von char oder"accented 'a'"
ist ein codepoint).InformationsquelleAutor der Antwort Logan Capaldo
Seltsamerweise niemand darauf hingewiesen, wie zu berechnen, wie viele bytes ein Unicode-char. Hier ist die Regel für UTF-8-kodierte strings:
Also die kurze Antwort ist: es dauert 1 bis 4 bytes je nach die erste, die anzeigt, wie viele bytes es nehmen werde.
Update
Als prewett darauf hingewiesen, diese Regel gilt nur für UTF-8
InformationsquelleAutor der Antwort paul.ago
Ich weiß, diese Frage ist alt und hat bereits eine akzeptierte Antwort, aber ich möchte ein paar Beispiele (hoffe, es wird nützlich sein, um jemanden).
Recht. Tatsächlich, da ASCII eine 7-bit-Codierung, es unterstützt die 128-codes (95, die gedruckt werden), so verwendet es nur ein halbes byte (wenn das macht keinen Sinn).
Unicode nur Karten Zeichen zu codepoints. Es nicht definieren, wie zu Kodieren. Eine Textdatei enthält keine Unicode-Zeichen, sondern bytes/Oktetts, die möglicherweise repräsentieren Unicode-Zeichen.
Nicht. Aber fast. Also im Grunde ja. Aber noch keine.
Gleiche wie deiner 2. Frage.
Nein, das sind Codierungen. Sie definieren, wie der bytes/Oktetts darstellen sollte Unicode-Zeichen.
Nur ein paar Beispiele. Wenn einige von jenen, die nicht in Ihrem browser dargestellt werden (wahrscheinlich, weil die schriftart nicht unterstützt), gehen Sie zu
http://codepoints.net/U+1F6AA
(ersetzen1F6AA
mit dem codepoint in hex) zu sehen, ein Bild.a
©
®
ጷ
—
‰
€
™
☃
☎
☔
☺
⚑
⚛
✈
✞
〠
肉
?
?
Okay, ich bin immer weggetragen...
Fun facts:
InformationsquelleAutor der Antwort basic6
Einfach gesagt
Unicode
ist ein standard zugewiesen eine Zahl (genannt code point), um alle Zeichen der Welt (noch in Arbeit).Nun müssen Sie, um dies darzustellen code Punkte unter Verwendung von bytes -, das ist genannt
character encoding
.UTF-8, UTF-16, UTF-6
sind die Möglichkeiten, diese Zeichen.UTF-8
ist multibyte-Zeichenkodierung. Zeichen kann aus 1 bis 6 Byte (einige von Ihnen möglicherweise nicht erforderlich).UTF-32
jedes Zeichen 4 bytes einem Zeichen.UTF-16
verwendet 16 bit für jeden Charakter und stellt nur einen Teil der Unicode-Zeichen, den sogenannten BMP (für alle praktischen Zwecke reicht es). Java nutzt diese Codierung in die Saiten.InformationsquelleAutor der Antwort Zimbabao
In Unicode-die Antwort ist nicht einfach gegeben. Das problem, wie Sie bereits darauf hingewiesen, sind die Codierungen.
Einen englischen Satz ohne diakritische Zeichen, die Antwort für UTF-8 wäre, wie viele bytes wie Zeichen und für UTF-16-es wäre die Anzahl der Zeichen mal zwei.
Nur Kodieren, wenn (wie jetzt) können wir die Aussage über die Größe ist UTF-32. Es ist immer 32 bit pro Zeichen, auch wenn ich mir vorstellen, dass die code-Punkte, die bereit sind, für eine Zukunft UTF-64 🙂
Was macht es so schwer ist, sind mindestens zwei Dinge:
U+20AC
dargestellt werden kann, entweder als drei-byte - SequenzE2 82 AC
oder vier-byte - SequenzF0 82 82 AC
.InformationsquelleAutor der Antwort 0xC0000022L
In UTF-8:
In UTF-16:
In UTF-32:
10FFFF ist das Letzte unicode-codepoint per definition, und es ist definiert, dass die Art und Weise, weil es UTF-16 ist die technische Grenze.
Ist es auch das größte Codepunkt in UTF-8 Kodierung in 4 byte, aber die Idee hinter UTF-8-Kodierung arbeitet auch für 5-und 6-byte-Kodierungen zu decken codepoints bis 7FFFFFFF, dh. die Hälfte von dem, was UTF-32 können.
InformationsquelleAutor der Antwort John
Es ist ein großes Werkzeug für die Berechnung der bytes an eine beliebige Zeichenfolge im UTF-8: http://mothereff.in/byte-counter
Update: @mathias gemacht hat, den code öffentlich: https://github.com/mathiasbynens/mothereff.in/blob/master/byte-counter/eff.js
InformationsquelleAutor der Antwort Nic Cottrell
Nun, ich habe gerade gezogen, bis die Wikipedia-Seite auf Sie zu, und im intro-Teil sah ich "Unicode implementiert werden können durch verschiedene Zeichen-Kodierungen. Die am häufigsten verwendeten Kodierungen sind UTF-8 verwendet ein byte für jedes ASCII-Zeichen, die die gleiche code-Werte in UTF-8 und ASCII-Kodierung, und bis zu vier bytes, die für andere Zeichen), die jetzt veralteten UCS-2 (mit zwei Byte für jedes Zeichen, aber nicht Kodieren Sie jedes Zeichen in der aktuellen Unicode-standard)"
Wie dieses Zitat zeigt, das problem ist, dass Sie unter der Annahme Unicode ist eine einzelne Art und Weise der Codierung von Zeichen. Es gibt tatsächlich mehrere Formen von Unicode, und, wieder in das Zitat, einer von Ihnen hat sogar 1 byte pro Zeichen genau wie das, was Sie gewohnt sind.
So Ihre einfache Antwort, die Sie wollen, ist, dass es variiert.
InformationsquelleAutor der Antwort Loduwijk
Für UTF-16-character braucht vier bytes (zwei code-Einheiten), wenn es beginnt mit 0xD800 oder größer; ein solcher Charakter wird als "ersatzpaar." Genauer gesagt, ein ersatzpaar hat die form:
wo [...] kennzeichnet eine zwei-byte-code, der Einheit mit dem gegebenen Bereich. Alles <= 0xD7FF ist eine code-Einheit (zwei bytes). Alles >= 0xE000 ist ungültig (außer BOM Marker, wohl).
Sehen http://unicodebook.readthedocs.io/unicode_encodings.htmlAbschnitt 7.5.
InformationsquelleAutor der Antwort prewett
Schauen Sie sich dieses Unicode code converter. Zum Beispiel, geben Sie
0x2009
wo 2009 ist die Unicode-Nummer für schmalen Raumin "0x... - notation" - Feld, und klicken Sie auf "Konvertieren". Der hexadezimale ZahlE2 80 89
(3 bytes) wird in der "UTF-8 code units" - Feld.InformationsquelleAutor der Antwort ma11hew28