Todos os caracteres em ASCII podem ser codificados usando UTF-8 sem um aumento no armazenamento (ambos requerem um byte de armazenamento).
O UTF-8 possui o benefício adicional do suporte a caracteres além de "caracteres ASCII". Se for esse o caso, por que é que vamos sempre escolher a codificação ASCII sobre UTF-8?
Existe um caso de uso em que escolheremos ASCII em vez de UTF-8?
character-encoding
utf-8
ascii
Pacerier
fonte
fonte
Respostas:
Em alguns casos, pode acelerar o acesso a caracteres individuais. Imagine uma string
str='ABC'
codificada em UTF8 e ASCII (e supondo que o idioma / compilador / banco de dados saiba sobre codificação)Para acessar o terceiro
C
caractere ( ) dessa string usando o operador de acesso à matriz, que é destaque em muitas linguagens de programação, você faria algo assimc = str[2]
.Agora, se a string for codificada em ASCII, tudo o que precisamos fazer é buscar o terceiro byte da string.
Se, no entanto, a string for codificada em UTF-8, primeiro devemos verificar se o primeiro caractere é um caractere de um ou dois bytes, precisamos executar a mesma verificação no segundo caractere e somente assim podemos acessar o terceiro caractere. A diferença no desempenho será maior, quanto maior a corda.
Esse é um problema, por exemplo, em alguns mecanismos de banco de dados, onde, para encontrar o início de uma coluna colocada 'após' um VARCHAR codificado em UTF-8, o banco de dados não precisa apenas verificar quantos caracteres existem no campo VARCHAR, mas também como muitos bytes que cada um deles usa.
fonte
Se você usar apenas o subconjunto US-ASCII (ou ISO 646) do UTF-8, não haverá uma vantagem real para um ou outro; de fato, tudo é codificado de forma idêntica.
Se você vai além do conjunto de caracteres US-ASCII e usa (por exemplo) caracteres com acentos, trematos etc., usados em idiomas típicos da Europa Ocidental, então há uma diferença - a maioria deles ainda pode ser codificado com um único byte na ISO 8859, mas exigirá dois ou mais bytes quando codificado em UTF-8. Há também, é claro, desvantagens: a ISO 8859 exige que você use alguns meios fora da banda para especificar a codificação que está sendo usada e suporta apenas uma.desses idiomas por vez. Por exemplo, você pode codificar todos os caracteres do alfabeto cirílico (russo, bielorrusso, etc.) usando apenas um byte cada, mas se precisar / desejar misturar esses caracteres com caracteres franceses ou espanhóis (além dos US-ASCII / ISO 646) você está sem sorte - precisa alterar completamente os conjuntos de caracteres para fazer isso.
A ISO 8859 é realmente útil apenas para alfabetos europeus. Para dar suporte à maioria dos alfabetos usados na maioria dos alfabetos chinês, japonês, coreano, árabe, etc., você precisa usar uma codificação completamente diferente. Alguns deles (por exemplo, Shift JIS para japonês) são uma dor absoluta para lidar. Se houver alguma chance de você querer apoiá-los, considero que vale a pena usar o Unicode apenas por precaução.
fonte
ANSI pode ser muitas coisas, a maioria sendo conjuntos de caracteres de 8 bits nesse sentido (como a página de código 1252 no Windows).
Talvez você estivesse pensando em ASCII, que é de 7 bits e um subconjunto adequado de UTF-8. Ou seja, qualquer fluxo ASCII válido também é um fluxo UTF-8 válido.
Se você estivesse pensando em conjuntos de caracteres de 8 bits, uma vantagem muito importante seria que todos os caracteres representáveis sejam exatamente de 8 bits, onde no UTF-8 eles podem ter até 24 bits.
fonte
Sim, ainda existem alguns casos de uso em que o ASCII faz sentido: formatos de arquivo e protocolos de rede . Em particular, para usos em que:
Ao usar o ASCII como sua codificação, você evita a complexidade da codificação de bytes múltiplos, mantendo ao menos alguma legibilidade humana.
Alguns exemplos:
IDAT
significa "dados da imagem" ePLTE
significa "paleta".É claro que você precisa ter cuidado para que os dados realmente não sejam apresentados aos usuários finais, porque se eles ficarem visíveis (como aconteceu no caso dos URLs), os usuários esperam, com razão, que esses dados sejam em um idioma que eles possam ler.
fonte
Primeiro de tudo: seu título usa / d ANSI, enquanto no texto você se refere a ASCII. Observe que ANSI não é igual a ASCII. ANSI incorpora o conjunto ASCII. Mas o conjunto ASCII é limitado aos primeiros 128 valores numéricos (0 - 127).
Se todos os seus dados estiverem restritos a ASCII (7 bits), não importa se você usa UTF-8, ANSI ou ASCII, pois ambos ANSI e UTF-8 incorporam o conjunto ASCII completo. Em outras palavras: os valores numéricos de 0 até 127, inclusive, representam exatamente os mesmos caracteres em ASCII, ANSI e UTF-8.
Se você precisar de caracteres fora do conjunto ASCII, precisará escolher uma codificação. Você pode usar o ANSI, mas depois enfrenta os problemas de todas as diferentes páginas de código. Criar um arquivo na máquina A e lê-lo na máquina B pode / produzirá textos engraçados se essas máquinas estiverem configuradas para usar páginas de códigos diferentes, simples porque o valor numérico nnn representa caracteres diferentes nessas páginas de código.
Esse "inferno de página de código" é a razão pela qual o padrão Unicode foi definido. UTF-8 é apenas uma codificação única desse padrão; existem muito mais. O UTF-16 é o mais amplamente utilizado, pois é a codificação nativa do Windows.
Portanto, se você precisar suportar algo além dos 128 caracteres do conjunto ASCII, meu conselho é usar o UTF-8 . Dessa forma, não importa e você não precisa se preocupar com qual página de código seus usuários configuraram seus sistemas.
fonte