Ich könnte mir vorstellen, dass der Grund dafür schnell war, der Array-ähnliche Zugriff auf die Zeichen am Index, aber einige Zeichen passen nicht in 16 Bit, also würde es nicht funktionieren ...
Wenn Sie also trotzdem spezielle Fälle behandeln müssen, warum nicht einfach UTF-8 verwenden?
Antworten:
Weil es früher UCS-2 war , was eine schöne 16-Bit-Version mit fester Länge war. Natürlich hat sich herausgestellt, dass 16bit nicht genug ist. Sie haben UTF-16 nachgerüstet.
quelle
Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.
Zum Zeitpunkt der Java-Veröffentlichung war UTF-16 noch nicht erschienen und UTF-8 war kein Teil des Unicode-Standards.Zum großen Teil, um einfach und zukunftssicher zu sein. Ob es ein irrtümlicher Grund und der falsche Weg war, ist eine andere Frage.
In diesem Dokument werden einige Gründe für einige ihrer Entwurfsentscheidungen bezüglich der Umstellung auf Java 5 und UTF-16 aufgeführt. Dies erklärt auch einige der Mängel: Ergänzende Zeichen auf der Java-Plattform und die Gründe für die Verwendung des Java-Ökosystems verschiedene Kodierungen in ihrem Stapel? .
Weitere Informationen zu den Gefahren der Verwendung von UTF-16 und warum UTF-8 im Allgemeinen wahrscheinlich die bessere Option ist, finden Sie unter Sollte UTF-16 als schädlich eingestuft werden? und das UTF-8 Everywhere- Manifest.
quelle
string
ein "spezieller" Typ in Java erstellt worden wäre (ähnlich wie in JavaArray
), anstattString
eine "gewöhnliche" Klasse zu sein, die einen Verweis auf ein "gewöhnliches" Array enthält, das die tatsächlichen Zeichen enthält. Abhängig davon, wie eine Zeichenfolge generiert wird, ist UTF-8, UTF-16 oder sogar UTF-32 die effizienteste Methode zum Speichern dieser Zeichenfolge. Ich denke, es gibt keine besonders effiziente Möglichkeit für eine "normale" KlasseString
, mehrere Formate zu verarbeiten, aber ein "spezieller" Typ mit JVM-Unterstützung könnte dies.