Pergunta

Como faço para converter uma string wchar_t de maiúsculas para minúsculas em C ++?

A cadeia contém uma mistura de japonês, chinês, alemão e caracteres gregos.

Pensei em usar towlower ...

http://msdn.microsoft.com/ en-us / library / 8h19t214% 28VS.80% 29.aspx

.. mas a documentação diz que:

A conversão caso de towlower é específica de localidade. Apenas os caracteres relevantes para o local atual são alteradas no caso.

Edit: Talvez eu deveria descrever o que estou fazendo. Eu recebo uma consulta de pesquisa Unicode de um usuário. É originalmente em codificação UTF-8, mas eu estou convertendo-a em um widechar (posso estar errado sobre o texto). Meu depurador (VS2008) mostra corretamente o japonês, alemão, etc personagens em no "relógio rápida variável". Eu preciso passar por um outro conjunto de dados em Unicode e encontrar jogos da cadeia de pesquisa. Enquanto isso não é problema para mim fazer quando a pesquisa é sensível a maiúsculas, é mais problemático para fazê-lo caso insensível. Minha abordagem (talvez ingênuo) para resolver o problema seria converter todos os dados de entrada e dados de saída para minúsculas e depois compará-lo.

Foi útil?

Solução

Se a seqüência contém todos os personagens, o codeset deve ser baseado em Unicode. Se for implementado corretamente, Unicode (Capítulo 4 ' Propriedades de caractere ') define propriedades de caracteres incluindo se o personagem é maiúscula eo mapeamento minúsculas, e assim por diante.

Dado que preâmbulo, a função towlower() de <wctype.h> é a ferramenta correta para uso. Se ele não fazer o trabalho, você tem um problema QoI (Qualidade de Implementação), para discutir com o seu fornecedor. Se você encontrar o fornecedor responde, em seguida olhar para bibliotecas alternativas. Neste caso, você pode considerar UTI (International Components for Unicode).

Outras dicas

Você tem um problema desagradável na mão. A localidade em japonês não vai ajudar a converter alemão e vice-versa. Existem línguas que não têm o conceito de captalization ou (toupper e amigos seria um não-op aqui, suponho). Assim, você pode quebrar sua seqüência em pedaços individuais de palavras da mesma língua? Se você pode, então, você pode converter as peças e agregá-los para cima.

isso para espectáculos resposta como trabalhar com facetas de trabalhar com várias localidades. Se este for no Windows, você pode considerar o uso de funções da API Win32, se você pode trabalhar com C ++. NET (gerido C ++), você pode usar as funções char.ToLower e string.ToLower, que são compatíveis com Unicode.

Tenha um olhar em _wcslwr_l em <wchar.h> ( MSDN ).

Você deve ser capaz de executar a função na entrada para cada um dos locais.

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