Melhor resposta
As outras respostas não estão certas.
Unicode , é verdade, contém uma lista de caracteres de quase todos os scripts mundiais. No entanto, esta é apenas uma parte do padrão Unicode: o Conjunto de caracteres codificados universais . O padrão Unicode também inclui regras para renderizar, ordenar, normalizar e, sim, codificar esses caracteres Unicode.
UTF-8 é um dos as três codificações de caracteres padrão usadas para representar Unicode como texto de computador (as outras são UTF-16 e UTF-32). Historicamente, os arquivos de texto eram normalmente codificados como sequências de bytes em que cada byte representava um caractere. No entanto, como um byte pode ter apenas um dos 256 valores, isso não é possível para Unicode. A codificação Unicode mais simples é UTF-32 , que usa 4 bytes (ou 32 bits) por caractere. No entanto, isso é ineficiente no uso de armazenamento, memória e processamento. Até 1996, pensava-se (ou esperava-se) que 2 bytes seriam suficientes para representar todos os caracteres Unicode, mas então as pessoas perceberam quantos caracteres chineses existem. Como resultado, algumas linguagens como JavaScript ainda usam 2 bytes ( UCS-2 ) para representar caracteres, o que pode causar problemas ao lidar com caracteres como \ unicode {x1F60E } Para corrigir isso, UCS-2 foi substituído por UTF-16 , onde alguns caracteres eram representados por dois unidades de código de dois bytes em vez de uma. Isso torna a manipulação de strings mais complexa (por exemplo, calcular o comprimento de uma string), mas usa menos espaço do que UTF-32.
UTF-8 é semelhante ao UTF-16, exceto que suas unidades de código são todas de um byte (8 bits), com caracteres representados por entre uma e quatro unidades de código. Os caracteres de texto simples (isto é, ASCII) são todos representados por um único byte, de maneira idêntica às strings normais não Unicode. Isso tem a grande vantagem de que o texto ASCII legado também é UTF-8 válido. Além disso, os bytes que representam ASCII não são usados na representação de nenhum outro caractere, portanto os programas legados que procuram por esses não precisam ser atualizados. Essas vantagens, combinadas com o fato de que UTF-8 é normalmente a forma mais eficiente de espaço armazenar texto Unicode (especialmente para textos ocidentais) significa que a grande maioria das páginas da web hoje em dia são codificadas em UTF-8.
Resposta
O programa de processamento de texto deve gerar algo (e salvar algo em um arquivo). Se você deseja que os programas interoperem, seu programa de processamento de texto para falar com seus drivers de impressora e scanner, por exemplo, você precisa descrever como eles se comunicam. E, você gostaria de fazer isso de forma eficiente. um padrão permite essa intercomunicação. Caso contrário, suas aspas inteligentes do Microsoft Word não funcionarão com sua impressora Canon e scanner HP. Não é o que você deseja….
Edição adicionada: Veja a resposta do Comet sobre como o Unicode está relacionado à semântica (não à sintaxe /representação). Isso vai ao meu ponto sobre interoperabilidade. Você quer que sua sequência de personagens seja “significativa”. É por isso que algumas coisas são representadas em Unicode e outras não. Os usuários do alfabeto latino, os usuários do alfabeto cirílico, os usuários do alfabeto grego e os usuários do alfabeto turco, todos têm uma letra que se parece com “a” (embora em algumas fontes sejam distinguíveis e em outras não), mas os escritores dessas línguas as consideram caracteres diferentes (eles têm uma diferença semântica). Assim, unicode os considera diferentes pontos de código. Eles representam semânticas diferentes, classificam de forma diferente, etc. O mesmo vale para aspas à esquerda e à direita e certos caracteres de acento. Em alguns idiomas, eles fazem uma diferença semântica. Você obtém um certo tipo de interoperabilidade quando representa a semântica corretamente.
Você obtém um tipo diferente quando representa as coisas de maneira pictórica corretamente. No entanto, o unicode está se esforçando para o primeiro, não o segundo.
Se o unicode representasse os homóglifos como caracteres únicos, eles teriam problemas sobre qual fonte estava sendo usada e isso destruiria a correção semântica. Uma letra latina a em fonte preta é muito diferente de uma letra helvética ou romana etc. E a inclinação e o itálico nem sempre são iguais, mas às vezes são.
Quando leio placas na Bulgária, a maioria vezes eles usam uma fonte muito diferente para seus caracteres cirílicos do que sua transcrição em latim, então é óbvio que eles são caracteres diferentes, mesmo para coisas como a letra “a”. Mas às vezes não, e quando vejo Bm em uma placa de carro, tenho que distinguir se é transcrito para Vt em inglês ou simplesmente em latim Bm e há palavras inteiras como essa que tenho que ler para saber qual conjunto de caracteres elas estão usando.
E mesmo obter correção semântica é difícil. O alemão sustenido-s existe apenas em minúsculas e se você imprimir a palavra em todas as “maiúsculas”, você usará dois caracteres S, mas há palavras em minúsculas que usam dois caracteres “minúsculos” e outras que usam sustenido- s.
Assim, como quase todos os padrões, unicode é um compromisso. Ele tenta obter as respostas certas para que as palavras sejam representadas corretamente e possam ser transmitidas por meio dele. Não tenta ser “graficamente” correto, de modo que uma sequência unicode descreve sua representação impressa de forma inequívoca com todos os detalhes prescritos. Você precisa de mais do que unicode para fazer isso.
E, uma vez que você vá por esse caminho, você terá o problema com dispositivos que não podem produzir (ou inserir) a descrição que você deseja especificar. Uma impressora de 200 dpi só pode fazer tanto e há sutilezas que uma impressora de 1200 dpi pode expressar que são simplesmente perdidas em 200 dpi. A questão é: você se importa? Às vezes sim, mas outras vezes não.
O Unicode é bom para muitos casos em que você não deseja e simplesmente deseja a semântica correta. Quando você deseja transmitir uma palavra sem ambigüidade e sabendo quais pontos de código Unicode são usados, saiba como a palavra é escrita em uma linguagem natural. A existência de homóglifos permite que alguém seja ambíguo, mas não exige isso. Você pode ser inequívoco em Unicode. Você simplesmente não pode representar todos os detalhes de como pode ser impresso.