omo criar uma literal de string UTF-8 no Visual C ++ 2008

No VC ++ 2003, eu poderia salvar o arquivo de origem como UTF-8 e todas as strings foram usadas como estão. Em outras palavras, o código a seguir imprimiria as seqüências como estão no console. Se o arquivo de origem foi salvo como UTF-8, a saída será UTF-8.

printf("Chinese (Traditional)");
printf("中国語 (繁体)");
printf("중국어 (번체)");
printf("Chinês (Tradicional)");

Salvei o arquivo no formato UTF-8 com a BOM UTF-8. No entanto, a compilação com o VC2008 resulta em:

warning C4566: character represented by universal-character-name '\uC911' 
cannot be represented in the current code page (932)
warning C4566: character represented by universal-character-name '\uAD6D' 
cannot be represented in the current code page (932)
etc.

Os caracteres que causam esses avisos estão corrompidos. Os que se encaixam na localidade (neste caso 932 = japonês) são convertidos para a codificação local, ou seja, Shift-JIS.

Não consigo encontrar uma maneira de obter o VC ++ 2008 para compilar isso para mim. Observe que não importa qual localidade eu uso no arquivo de origem. Não parece haver um código de idioma que diga "Eu sei o que estou fazendo, portanto, não f $% ## ng altere meus literais de string". Em particular, a pseudo-localidade UTF-8 inútil não funcion

#pragma setlocale(".65001") 
=> error C2175: '.65001' : invalid locale

Nem "C":

#pragma setlocale("C") 
=> see warnings above (in particular locale is still 932)

Parece que o VC2008 força todos os caracteres para o código do idioma especificado (ou padrão) e esse código do idioma não pode ser UTF-8. Não quero alterar o arquivo para usar seqüências de escape como "\ xbf \ x11 ..." porque a mesma fonte é compilada usando o gcc, que pode lidar com os arquivos UTF-

Existe alguma maneira de especificar que a compilação do arquivo de origem deve deixar os literais de string intocado

Para perguntar de maneira diferente, quais sinalizadores de compilação posso usar para especificar a compatibilidade com o VC2003 ao compilar o arquivo de origem. ou seja, não altere os literais da string, use-os byte a byte como estã

Atualiza

Obrigado pelas sugestões, mas quero evitar o wchar. Como este aplicativo lida exclusivamente com seqüências de caracteres em UTF-8, o uso do wchar exigiria que eu convertesse todas as seqüências de volta em UTF-8, o que seria desnecessário. Todas as entradas, saídas e processamento interno estão em UTF-8. É um aplicativo simples que funciona bem como no Linux e quando compilado com o VC2003. Quero poder compilar o mesmo aplicativo com o VC2008 e fazê-lo funcionar.

Para que isso aconteça, preciso do VC2008 para não tentar convertê-lo no código de idioma da minha máquina local (japonês, 932). Quero que o VC2008 seja compatível com versões anteriores do VC2003. Eu quero uma configuração de localidade ou compilador que diga que as strings são usadas como estão, essencialmente como matrizes opacas de char ou como UTF-8. Parece que eu posso estar preso ao VC2003 e ao gcc, mas o VC2008 está tentando ser inteligente demais neste cas

questionAnswers(17)

yourAnswerToTheQuestion