Sintomas
Considere o seguinte cenário:
-
Criar um projecto de Visual C++ no Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
Um ficheiro do projecto tem estreito cadeias literais. Estas cadeias literais contenham caracteres asiáticos e não têm como prefixo com a letra "l".
-
As cadeias literais utilizam codificação UTF-8.
Neste cenário, quando compila o projecto, as cadeias literais são interpretado incorrectamente pelo compilador. Além disso, se deparar com um dos seguintes problemas:
-
A operação de compilação é efectuada com êxito. No entanto, as cadeias literais são apresentados incorrectamente na aplicação gerada. Além disso, também poderá receber as seguintes mensagens de aviso quando compilar o projecto:
aviso C4566: carácter representado por universal-carácter-name 'xx' não pode ser representado na página de códigos actual.
-
A operação de compilação falha. Além disso, poderá receber a seguinte mensagem de erro quando compilar o projecto:
Erro C2078: demasiados inicializadores
Causa
Este problema ocorre porque o compilador assume que o ficheiro na secção "Sintomas" tem MBCS codificação. Devido a este comportamento, o compilerincorrectly converte o ficheiro.
Resolução
Informações sobre correção
Existe uma correção suportada pela Microsoft. No entanto, esta correção destina-se apenas a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico.
Se a correcção estiver disponível para transferência, existirá uma secção de "Transferência de correcção disponível" na parte superior deste artigo da Base de dados de conhecimento. Se esta secção não for apresentado, submeta um pedido de suporte e serviço de cliente Microsoft para obter a correcção.
Nota Caso ocorram problemas adicionais ou se for necessária a resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos de normais do suporte serão aplicados a questões de suporte adicional e problemas incluídos nesta correção específica. Para uma lista completa dos números de telefone de suporte e serviço de cliente da Microsoft ou para criar um pedido de assistência separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportNota O formulário "Transferência de correcção disponível" apresenta os idiomas nos quais a correcção está disponível. Se não visualizar o seu idioma, é porque uma correcção não está disponível para esse idioma.
Pré-requisitos
Tem de ter o Visual Studio 2008 Service Pack 1 (SP1) instalado para aplicar esta correcção.
Requisito de reinício
Não é necessário reiniciar o computador depois de aplicar esta correcção não se estiver a ser utilizada nenhuma instância do Visual Studio.
Informações sobre substituição da correção
Esta correcção não substitui outras correcções.
Informações de ficheiro
A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são listadas na hora Universal Coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador Fuso horário no item data e hora no painel de controlo.
Nome do ficheiro |
Versão do ficheiro |
Tamanho do ficheiro |
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 |
Estado
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".
Mais informações
Para resolver o erro no compilador, instalar esta correcção e, em seguida, guarde o ficheiro com uma marca de ordem de bytes. Além disso, adicione a seguinte directiva "pragma" antes das cadeias literais no ficheiro de origem.
#pragma execution_character_set("utf-8")
Nota A Directiva "pragma" define a unidade de tradução para o ficheiro de origem até que a Directiva "pragma" é substituída por outra directiva "pragma".