Eu imagino que o motivo foi rápido, como o acesso ao caractere no índice, mas alguns caracteres não se encaixam em 16 bits, por isso não funcionaria ...
Portanto, se você precisa lidar com casos especiais, por que não usar UTF-8?
Eu imagino que o motivo foi rápido, como o acesso ao caractere no índice, mas alguns caracteres não se encaixam em 16 bits, por isso não funcionaria ...
Portanto, se você precisa lidar com casos especiais, por que não usar UTF-8?
Respostas:
Porque costumava ser o UCS-2 , que era um bom tamanho fixo de 16 bits. Obviamente, 16 bits acabou por não ser suficiente. Eles adaptaram o UTF-16 na 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.
Na época do lançamento do Java, o UTF-16 ainda não apareceu e o UTF-8 não fazia parte do padrão Unicode.
Para a parte principal, em prol de uma prova de futuro clara e simples. Se foi uma razão equivocada e o caminho errado a seguir, é uma questão diferente.
Você pode ver alguns motivos por trás de algumas de suas decisões de design neste documento sobre a mudança de 2004 para Java 5 e UTF-16, que também explica algumas das deficiências: Caracteres complementares na plataforma Java e consulte Por que o ecossistema Java usa codificações diferentes em toda a pilha? .
Para obter mais detalhes sobre as armadilhas do uso do UTF-16 e por que o UTF-8 é provavelmente uma opção melhor em geral, consulte UTF-16 deve ser considerado prejudicial? e o manifesto UTF-8 Everywhere .
string
um tipo "especial" em Java (como Array
é o caso), em vez de String
ser uma classe "comum" que contém uma referência a uma matriz "comum" contendo os caracteres reais. Dependendo de como uma sequência é gerada, UTF-8, UTF-16 ou mesmo UTF-32 pode ser a maneira mais eficiente de armazená-la. Eu não acho que exista uma maneira particularmente eficiente para uma classe "comum" String
lidar com vários formatos, mas um tipo "especial" com suporte à JVM poderia.