Welche Probleme führen dazu, dass japanische Codierungen anstelle von Unicode verwendet werden?

24

Bei der Arbeit stoße ich auf viele japanische Textdateien in Shift-JIS und anderen Codierungen. Es verursacht viele Mojibake- Probleme (nicht lesbare Zeichen) für alle Computerbenutzer. Unicode sollte dieses Problem lösen, indem ein einziger Zeichensatz für alle Sprachen definiert wurde. Die UTF-8-Serialisierung wird für die Verwendung im Internet empfohlen. Warum wechselt nicht jeder von japanischen Codierungen zu UTF-8? Welche Probleme mit oder Nachteile von UTF-8 halten die Menschen zurück?

EDIT: Das W3C listet einige bekannte Probleme mit Unicode auf , könnte dies auch ein Grund sein?

Nicolas Raoul
quelle
Tatsächlich gibt es in UTF-8 immer mehr populäre Websites. Ein Beispiel dafür sind ニ ニ コ ニ コ und 動画 は て
Ken Li
8
Warum wechselt nicht jeder von ISO-8851-1 auf UTF-8?
ysdx
1
Nebenbei wird erwähnt , dass SHIFT-JIS -> UTF-8-Konvertierung nicht verlustfrei ist. Dies wäre ein wichtiger Grund, SHIFT-JIS dort weiter zu verwenden, wo es bereits verwendet wird. Ich fand diesen angeblichen Faktoid jedoch überraschend, und ich hoffte, dass eine der Antworten hier detaillierter ausfällt oder zumindest eine Quelle für die Behauptung liefert, aber keiner von ihnen tut dies.
Kyle Strand
@KyleStrand siehe support.microsoft.com/en-us/help/170559/…
Ludwig Schulze
@LudwigSchulze Danke. Immer noch nicht viele Details, aber zumindest eine offizielle Quelle ...
Kyle Strand

Antworten:

28

Mit einem Wort: Vermächtnis.

Shift-JIS und andere Kodierungen wurden verwendet, bevor Unicode verfügbar / populär wurde, da dies die einzige Möglichkeit war, Japanisch überhaupt zu kodieren. Unternehmen haben in eine Infrastruktur investiert, die nur Shift-JIS unterstützt. Auch wenn die Infrastruktur jetzt Unicode unterstützt, sind sie nach wie vor mit Shift-JIS aus verschiedenen Gründen im Bereich von stecken it-Werken-so-nicht-touch-it über Codierung , was? Die Migration aller vorhandenen Dokumente ist zu kostspielig .

Es gibt viele westliche Unternehmen, die aus den gleichen Gründen immer noch ASCII oder Latin-1 verwenden, aber niemand merkt es, da es nie zu Problemen führt.

betrügen
quelle
8
Japanische Softwareindustrie ... langsamer als Schmutz bei der Verwendung neuer Software / Standards.
Mark Hosang
2
@Mark Wahrere Worte wurden nie gesprochen! (Ich arbeite in / mit der japanischen IT ... -_- ;;)
Betrüge den
5
Es stimmt, aber westliche Unternehmen haben die Ausrede, dass unsere Legacy-Software voll von hartkodierten Annahmen ist, dass 1 Byte = 1 Zeichen ist, was den Übergang zu UTF-8 schwieriger macht als für Asiaten, die seit langem MBCS-sauberen Code schreiben müssen.
Dan04
@ Mark Hosang Ich bestätige, dass Ihre Aussage 100% korrekt ist (ich arbeite für japanische Unternehmen in Tokio)
Hassan Tareq
9

Dies sind die Gründe, aus denen ich mich erinnere, dass UTF-8 oder eine andere Unicode-Darstellung nicht zur Standard-Zeichenkodierung für die Skriptsprache Ruby gemacht wurde, die hauptsächlich in Japan entwickelt wird:

  • Grund 1: Han-Vereinigung . Die Zeichensätze (nicht sicher, ob "Alphabete" hier korrekt wären), die in China, Korea und Japan verwendet werden, sind alle miteinander verwandt und stammen aus der gemeinsamen Geschichte. Das Unicode-Konsortium hat beschlossen, nur einen einzigen Unicode-Codepunkt zu verschwenden, um alle Varianten (Chinesisch, Japanisch und Koreanisch) desselben historischen Zeichens zu codieren, auch wenn sich ihr Erscheinungsbild in allen drei Sprachen unterscheidet. Ihre Argumentation ist, dass das Erscheinungsbild von der Schriftart bestimmt werden sollte, mit der der Text angezeigt wird.

Anscheinend wird diese Argumentation von japanischen Nutzern als ebenso lächerlich empfunden, wie es für englische Leser der Fall wäre, dass es ausreicht, nur einen einzigen Codepunkt für griechisches Alpha zu haben, da sich das lateinische Alphabet aus dem griechischen Alphabet entwickelt hat. " α "und Latin" a ", und lassen Sie das Erscheinungsbild von der verwendeten Schriftart entscheiden. (Gleiches gilt für "β" = "b", "γ" = "g" usw.)

(Beachten Sie, dass ich in diesem Fall keine griechischen Zeichen in stackexchange einfügen könnte.)

  • Grund 2: Ineffiziente Zeichenkonvertierungen. Für die Konvertierung von Zeichen von Unicode in ältere japanische Codierungen und umgekehrt sind Tabellen erforderlich, dh es gibt keine einfache Berechnung von Unicode-Codepunktwerten in ältere Codepunktwerte und umgekehrt. Außerdem gehen beim Konvertieren einige Informationen verloren, da nicht alle Codepunkte in einer Codierung eine eindeutige Darstellung in der anderen Codierung haben.

Möglicherweise wurden weitere Gründe angeführt, an die ich mich nicht mehr erinnere.

Ludwig Schulze
quelle
Es scheint, dass Ruby ab 2.0 UTF-8 als Standard verwendet hat. Aber die Han-Vereinigung scheint ein wirklich wichtiges (und sehr umstrittenes) Problem in der Unicode-Welt zu sein, das anscheinend nicht genügend Beachtung findet, da ich noch nie davon gehört habe.
Kyle Strand
Und hier ist ein Wikipedia-Artikel über die Han-Einigungsfrage: de.wikipedia.org/wiki/Han_unification Das scheint in der Tat eine gültige Frage zu sein, tolle Antwort! Auch ein Terminverlust wäre ein guter Grund.
Spbnick
8

Die Antwort von deceze hat ein sehr starkes Wahrheitsmerkmal, aber es gibt noch einen weiteren Grund, warum Shift-JIS und andere noch verwendet werden: UTF-8 ist für einige Sprachen, hauptsächlich im CJK-Set, schrecklich ineffizient. Shift-JIS ist, IIRC, eine zwei Byte breite Codierung, wohingegen UTF-8 in seinen Codierungen mit CJK und anderen typischerweise drei Byte und gelegentlich sogar vier Byte umfasst.

Nur meine richtige Meinung
quelle
7
Zwar gibt es immer die Alternative zu UTF-16, die so effizient sein kann wie Shift-JIS. Ich würde auch argumentieren, dass die Kopfschmerzen beim Umgang mit verschiedenen Kodierungen die leichte Zunahme der Größe in der heutigen Zeit bei weitem überwiegen. Anders ausgedrückt, ich habe das Argument der Effizienz für Shift-JIS noch nie von jemandem gehört, der es noch verwendet. ;-)
Täusche den
5
Ich habe gehört, dass das Effizienzproblem eine Entschuldigung für Trägheit und Trägheit ist.
NUR MEINE STELLUNGNAHME
1
Mit UTF-16 werden grundlegende ASCII-Zeichen [von denen es in z. B. HTML eine beträchtliche Anzahl gibt] doppelt so groß. Soweit ich weiß, wird UTF-16 dadurch sogar noch schlechter als UTF-8 für japanische Webseiten.
Random832
2
@NUR meine richtige MEINUNG: Versuchen Sie "Quelltext anzeigen" oder das Äquivalente. Angenommen, der gesamte tatsächliche Text ist auf Japanisch, dann gibt es wahrscheinlich eine Vielzahl von Stichwörtern und Ähnlichem, die aus dem Englischen abgeleitet und in ASCII dargestellt wurden.
David Thornley
4
Das klingt für mich nach einem Grund, den wir später finden . Ich bin mir ziemlich sicher, dass Effizienz fast nichts mit dem Status Quo zu tun hat. Für mich ist es nur Trägheit und Vermächtnis. Eigentlich habe ich auch damit zu tun, dass der größte Teil des von japanischen Programmierern erstellten Codes für andere Japaner bestimmt ist, sodass sie nicht einmal das Bedürfnis haben, so etwas wie Unicode zu verwenden.
Julien Guertault
2

Zählen Sie die Zeichenfolgengröße / Speichernutzung zu den Hauptgründen.

In UTF-8 benötigen ostasiatische Sprachen häufig 3 oder mehr Bytes für ihre Zeichen. Im Durchschnitt benötigen sie 50% mehr Speicher als bei Verwendung von UTF-16 - letzteres ist bereits weniger effizient als die native Codierung.

Der andere Hauptgrund wäre Vermächtnis, wie durch Täuschung hervorgehoben wird.

Denis de Bernardy
quelle
2

Vermächtnis und Speichergröße, wie andere sagten, aber es gibt noch etwas: Katakana-Charaktere.

Die Darstellung von Katakana-Zeichen in Shift-JIS erfordert nur ein Byte. Daher benötigt japanischer Text einschließlich Katakana weniger als 2 Byte pro Zeichen (1,5 für eine 50/50-Mischung), was Shift-JIS effizienter macht als UTF-16 (2 Byte) / char) und viel effizienter als UTF-8 (3 Bytes / char).

Billiger Speicher hätte dies zu einem viel kleineren Problem machen sollen, aber anscheinend nicht.

Azheglov
quelle