Qual é a prática recomendada de processamento Unicode em C ++?
107
is_alpha
menos que essa seja a definição que você deseja.string
se você se preocupa com a correção, sempre use sua biblioteca Unicode para isso.
string
como dados binários.Se você não se preocupa com a compatibilidade com os padrões C ++ anteriores, o padrão C ++ 11 atual tem suporte integrado a Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Portanto, a prática realmente recomendada para processamento Unicode em C ++ seria usar os recursos integrados para isso. Isso nem sempre é uma possibilidade com bases de código mais antigas, porém, com o padrão sendo tão novo no momento.
EDIT: Para esclarecer, C ++ 11 é Unicode ciente de que agora tem suporte para Unicode literais e strings Unicode. No entanto, a biblioteca padrão tem apenas suporte limitado para processamento e conversão Unicode. Para suas necessidades atuais, isso pode ser o suficiente. No entanto, se você precisar fazer muito trabalho pesado agora, talvez ainda seja necessário usar algo como UTI para um processamento mais aprofundado. Existem algumas propostas em andamento para incluir um suporte mais robusto para a conversão de texto entre diferentes codificações. Meu palpite (e espero) é que isso faça parte do próximo relatório técnico .
fonte
Nossa empresa (e outras) usa a biblioteca de software livre Internation Components for Unicode (ICU) desenvolvida originalmente pela Taligent.
Ele lida com strings, localidades, conversões, data / horas, agrupamento, transformações, etc. al.
Comece com o Guia do usuário ICU
fonte
Aqui está uma lista de verificação para a programação do Windows:
fonte
Veja a comparação de strings que não diferenciam maiúsculas de minúsculas em C ++
Essa pergunta tem um link para a documentação da Microsoft em Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Se você olhar no lado esquerdo da navegação no MSDN, próximo a esse artigo, deverá encontrar muitas informações relacionadas às funções Unicode. É parte de um capítulo sobre "Codificação de caracteres" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Possui as seguintes subseções:
fonte
Embora isso possa não ser a melhor prática para todos, você pode escrever suas próprias rotinas UNICODE em C ++ se desejar!
Acabei de fazer isso em um fim de semana. Aprendi muito, embora não garanta que esteja 100% livre de bugs, fiz muitos testes e parece funcionar corretamente.
Meu código está sob a licença New BSD e pode ser encontrado aqui:
http://code.google.com/p/netwidecc/downloads/list
É denominado WSUCONV e vem com um programa main () de amostra que converte entre UTF-8, UTF-16 e ASCII padrão. Se você jogar fora o código principal, terá uma ótima biblioteca para ler / escrever UNICODE.
fonte
Como foi dito acima, uma biblioteca é a melhor aposta quando se usa um sistema grande. No entanto, algumas vezes você quer lidar com as coisas sozinho (talvez porque a biblioteca usaria muitos recursos, como em um micro controlador). Nesse caso, você deseja uma biblioteca simples da qual possa copiar as partes para as coisas de que realmente precisa.
O código de exemplo de Willow Schlanger parece bom (veja sua resposta para mais detalhes).
Eu também encontrei outro que tem um código menor, mas não tem verificação completa de erros e só lida com UTF-8, mas era mais simples de remover partes.
Aqui está uma lista das bibliotecas incorporadas que parecem decentes.
Bibliotecas integradas
fonte
Use os componentes internacionais da IBM para Unicode
fonte
Dê uma olhada nas recomendações do UTF-8 Everywhere
fonte