Unicode é certamente difícil, e a codificação UTF-8 possui algumas propriedades inconvenientes. No entanto, o UTF-8 se tornou a codificação padrão na web, superando o ASCII, o Latin-1, o UCS-2 e o UTF-16. Apenas use UTF-8 em qualquer lugar .
A razão mais importante pela qual você deve suportar o Unicode é que você não deve fazer suposições desnecessárias sobre a entrada do usuário. Eu não tenho idéia do seu domínio, mas coisas como nomes de usuário em hebraico, uma postagem no blog sobre a China, um comentário com Emoji ou simplesmente um texto bem estilizado - como “isso” - devem ser possíveis… Oh, essas foram aspas tipograficamente corretas “”
em vez de ""
), traços em largura e reticências, que são caracteres comuns em texto em inglês, mas não suportados por ASCII ou Latin-1. Portanto, não apoiar outros scripts não é apenas um grande problema para outras culturas, mas manter o Latin-1 não permite que você escreva o inglês adequado.
A noção de que o Unicode permite apenas "caracteres ruins" está errada. Sim, o texto é realmente complicado e o Unicode não esconde isso de você. Seu chefe pode estar pensando em caracteres compostos, em que um ponto de código de base, como a
, é modificado por pontos de código subsequentes, por exemplo, representam diacríticos para formar um caractere visual, como á
. Isso não atrapalha ao tentar fazer buscas se você fizer algum tipo de normalização. Por exemplo, você pode armazenar todo o texto no formulário NFC, que recolhe essas composições no formulário pré-composto, se houver algum disponível. Ao fazer a pesquisa, você também pode retirar todos os caracteres de composição do texto, mas isso pode alterar substancialmente o seu significado em alguns idiomas.
O Unicode também adiciona muitos caracteres não imprimíveis - mas até o ASCII possui muitos deles. Você vai lidar com um NUL no meio de uma corda? Como cerca de 0x1C, um "File Separator"? Eu nunca vi metade deles . O Latin-1 adiciona um hífen suave que indica oportunidades de quebra de palavras, mas é invisível. Isso também interrompe sua pesquisa de texto completo? Em outras palavras, até mesmo o ASCII e o Latin-1 permitem que você quebre completamente sua entrada se você assumir que é tudo apenas um texto imprimível!