Pergunta

Esta é mais uma questão de MBCS do que uma questão unicode. Preciso criar uma API que retorne uma lista de estruturas que cada instância possua um caractere Unicode como um de seus membros. Isso está no .NET, então você pensaria que eu gostaria de UTF-16, mas depois para personagens asiáticos, gostaria de haver dois caracteres necessários. Qual é a melhor prática ao devolver caracteres Unicode?

  1. Use uma matriz de 2 chars UTF -16 - teste o 1º Char para ver se é substituto, tem uma contagem?
  2. Ignore o problema substituto e deixe o chamador descobrir as estruturas reais da codificação do glifo?
  3. Use uma string para que eu não me importo se tem um ou dois chars de comprimento?
  4. Use UTF-32

O que as pessoas normalmente fazem para o UTF-8? Acho que eles nunca lidam com personagens individuais e tudo é mantido em uma string (por exemplo, procurar um personagem em uma string é realmente feito procurando uma sub-string). Talvez seja o programador C ++ em mim, mas uma corda parece tão pesada.

Acho que vou fazer o número 3. O que os outros fizeram?

Foi útil?

Solução

Você está certo sobre o uso de strings. No Unicode, como mesmo um único caractere pode exigir vários pontos de código (o que cada um levaria um certo número de bytes, dependendo da codificação), você realmente não pode funcionar em nada menos que strings. Até funções como isUpper Ou isso deve pegar uma corda e trabalhar apenas no primeiro elemento dela.

A razão pela qual um personagem pode exigir vários pontos de código é tipicamente por causa dos caracteres combinados, para sotaques e tal.

Veja isso Pergunta no FAQ Unicode.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top