Como converter (não necessariamente programaticamente) entre o Windows Wchar_T e GCC/Linux One?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

Pergunta

Suponha que eu tenha essa string Windows wchar_t:

L"\x4f60\x597d"

e

L"\x00e4\x00a0\x597d"

e gostaria de convertê-lo (não necessariamente programaticamente; será uma coisa única) para o formato GCC/Linux wchar_t, que é o UTF-32 AFAIK. Como eu faço isso? (Uma explicação geral seria boa, mas o exemplo baseado nesse caso concreto também seria útil)

Por favor, não me direcione para sites de conversão de personagens. Eu gostaria de converter da forma L " x (algo)" e não "personagem final".

Foi útil?

Solução

Uma das bibliotecas mais usadas para fazer a conversão de personagens é a biblioteca da UTI http://icu-project.org/ É, por exemplo, usado por algum impulso http://www.boost.org/ Bibliotecas.

Outras dicas

Converteria do UTF-16 (o visual c ++ wchar_t forma) para UTF-8, depois possivelmente de UTF-8 para UCS-4 (o GCC wchar_t formulário), seja uma resposta aceitável?

Nesse caso, no Windows, você pode usar o WideCharToMultiByte função (com CP_UTF8 para o CodePage parâmetro), para a primeira parte da conversão. Em seguida, você pode colar as seqüências UTF-8 resultantes diretamente no seu programa ou convertê-las ainda mais. Aqui é uma mensagem mostrando como uma pessoa fez isso; Você também pode escrever seu próprio código ou fazê-lo manualmente (as especificações oficiais, com uma seção sobre exatamente como converter UTF-8 para UCS-4, pode ser encontrado aqui). Pode haver uma maneira mais fácil, ainda não estou familiarizado com o material de conversão no Linux.

Você só precisa se preocupar com os personagens entre xd800 e xdfff inclusive. Todos os outros personagens devem mapear exatamente o mesmo do UTF-16 para o UCS-4 quando preenchidos por zero.

Ignacio está certo, se você não usa alguns caracteres chineses raros (ou alguns scripts extintos), o mapeamento é um para um. (o oficial "linguagem" é "se você não tem personagens fora do BMP")

Este é o algoritmo, apenas para o caso: http://unicode.org/faq/utf_bom.html#utf16-3Mas, novamente, provavelmente inútil para o seu caso real.

Você também pode usar as fontes livres do Unicode (ftp://ftp.unicode.org/public/programs/cvtutf)

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