Pergunta

Então eu quero usar SetThreadLocale para definir um tópicos página de códigos para UTF8. Até agora, eu estive usando o segundo parâmetro de macros de conversão de cadeia atl como "CT2A (szBUF, CP_UTF8)" para fazer isso. Mas eu quero ser capaz de definir a página de códigos rosca uma vez no início com SetThreadLocale () e nunca tem que usar o segundo parâmetro da macro de conversão novamente.

Como posso fazer isso? SetThreadLocale não terá um parâmetro de página de código como CP_UTF8, apenas um LCID. Que parâmetros devo estar alimentando SetThreadLocale para alcançar este ??

Tenha em mente, eu não tenho nenhuma língua particular em mente. As cordas que recebo poderia ser japonês, coreano, Inglês Etc. Até agora, eu estou tendo problemas com esta mistura de cordas ao especificar CP_UTF8 como o segundo parâmetro de uma macro de conversão. Você pode perguntar "bem, então porque não basta continuar usando o segundo parâmetro". Resposta "porque pode ser facilmente esquecido por membros da equipe de trabalho sobre o código. Seria bom se ele iria apenas funcionar corretamente usando a versão padrão do parâmetro 1 do macro de conversão."

Foi útil?

Solução

SetThreadLocale espera um identificador de idioma, mas UTF-8 não é um identificador de idioma - é uma codificação Unicode. Uma das finalidades do ID terra é para dizer ao sistema como tratar texto ANSI na faixa 128-255. Dada uma linguagem verdadeira, a sua página de código será utilizado quando se lida com tais personagens. UTF-8, OTOH, é uma representação comprimida de texto Unicode. A fim de criar UTF-8 texto, sua entrada tem que ser Unicode. Dada texto ANSI, você simplesmente não vai saber como converter o intervalo superior de caracteres. Esta é a maneira quando feito "manualmente", a fim de converter ANSI para UTF-8 você tem que primeiro uso MultiByteToWideChar com uma página de código especificado, e só então você pode converter a seqüência de caracteres Unicode resultante para UTF-8.

Agora, de volta à sua pergunta - Eu iria de outra maneira. Se os erros de página de código param adicionais que você tanto assim, fazer uma macro que irá escondê-lo mais ou menos (ou herdar a classe CT2A e ter o segundo param fixo).

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