Me imagino que la razón fue rápida, como acceso de matriz al carácter en el índice, pero algunos caracteres no caben en 16 bits, por lo que no funcionaría ...
Entonces, si de todos modos tiene que manejar casos especiales, ¿por qué no usar UTF-8?
Me imagino que la razón fue rápida, como acceso de matriz al carácter en el índice, pero algunos caracteres no caben en 16 bits, por lo que no funcionaría ...
Entonces, si de todos modos tiene que manejar casos especiales, ¿por qué no usar UTF-8?
Respuestas:
Porque solía ser UCS-2 , que era un bonito de 16 bits de longitud fija. Por supuesto, 16 bits resultó no ser suficiente. Se adaptaron UTF-16 en la parte superior.
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.
en el momento del lanzamiento de Java, UTF-16 aún no ha aparecido, y UTF-8 no era parte del estándar Unicode.
En su mayor parte, por el simple y simple futuro. Si fue una razón equivocada y la forma incorrecta de hacerlo es una pregunta diferente.
Puede ver algunas razones detrás de algunas de sus decisiones de diseño en este documento sobre el cambio de 2004 a Java 5 y UTF-16, que explica algunas de las deficiencias también: Caracteres suplementarios en la plataforma Java , y vea por qué utiliza el ecosistema Java diferentes codificaciones en toda su pila? .
Para obtener más detalles sobre las trampas del uso de UTF-16, y por qué es probable que UTF-8 sea una mejor opción en general, consulte ¿Debe considerarse UTF-16 como dañino? y el manifiesto UTF-8 Everywhere .
string
un tipo "especial" en Java (muy parecido a lo que Array
es), en lugar de String
ser una clase "ordinaria" que tiene una referencia a una matriz "ordinaria" que contiene los caracteres reales. Dependiendo de cómo se genera una cadena, UTF-8, UTF-16 o incluso UTF-32 pueden ser la forma más eficiente de almacenarla. No creo que haya una forma particularmente eficiente para que una clase "ordinaria" String
maneje múltiples formatos, pero un tipo "especial" con soporte JVM podría.