Sintomas
Considere o seguinte cenário:
-
Criar um projeto Visual C++ no Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
Um arquivo no projeto tem literais de cadeia de caracteres estreita. Esses literais de cadeia de caracteres contém caracteres asiáticos e não são prefixados com a letra "l".
-
Os literais de sequência de caracteres usam a codificação UTF-8.
Nesse cenário, quando você compilar o projeto, os literais de sequência de caracteres são mal interpretados pelo compilador. Além disso, você encontrar um dos seguintes problemas:
-
A operação de compilação for bem-sucedida. No entanto, os literais de sequência de caracteres são exibidos incorretamente no aplicativo gerado. Além disso, você também pode receber as seguintes mensagens de aviso quando você compilar o projeto:
Aviso C4566: caractere representado pelo universal--nome do caractere 'xx' não pode ser representado na página de código atual.
-
A operação de compilação falhará. Além disso, você pode receber a seguinte mensagem de erro quando você compilar o projeto:
Erro C2078: inicializadores de excesso
Causa
Esse problema ocorre porque o compilador pressupõe que o arquivo na seção "Sintomas" tem codificação MBCS. Devido a esse comportamento, o compilerincorrectly converte o arquivo.
Resolução
Informações sobre o hotfix
Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir somente o problema descrito neste artigo. Aplique este hotfix somente aos sistemas que apresentarem esse problema específico.
Se o hotfix estiver disponível para download, há uma seção "Download de Hotfix disponível" na parte superior deste artigo da Base de Conhecimento. Se essa seção não for exibida, envie uma solicitação ao suporte e atendimento ao cliente Microsoft para obter o hotfix.
Observação: caso outros problemas estejam ocorrendo ou caso qualquer solução de problemas seja necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não sejam específicos deste hotfix. Para obter uma lista completa dos números de telefone do Atendimento Microsoft e suporte ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportObservação: o formulário "Baixar Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Caso você não veja seu idioma, é porque um hotfix não está disponível para esse idioma.
Pré-requisitos:
Você deve ter o Visual Studio 2008 Service Pack 1 (SP1) instalado para aplicar esse hotfix.
Requisitos de reinicialização:
Você não precisa reiniciar o computador após aplicar este hotfix se nenhuma instância do Visual Studio está sendo usada.
Informações de substituição do hotfix:
Esse hotfix não substitui outros hotfixes.
Informações sobre o arquivo:
A versão em inglês deste hotfix possui os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas na Hora Universal Coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para localizar a diferença entre o UTC e a hora local, use a guia Fuso Horário no item Data e Hora no Painel de Controle.
Nome do Arquivo |
Versão do arquivo |
Tamanho do arquivo |
Data |
Hora |
Plataforma |
---|---|---|---|---|---|
C1.dll |
15.0.30729.4987 |
678,720 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,204,488 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,215,240 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,339,656 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,505,552 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,891,592 |
09-Mar-2010 |
10:18 |
x64 |
Status
A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".
Mais informações
Para resolver o erro no compilador, instale esse hotfix e, em seguida, salve o arquivo com uma marca de ordem de byte. Além disso, adicione a seguinte diretiva de "pragma" antes dos literais de cadeia de caracteres no arquivo de origem.
#pragma execution_character_set("utf-8")
Observação: A diretiva "pragma" define a unidade de conversão para o arquivo de origem até que a diretiva "pragma" é substituída por outra diretiva "pragma".