CORRECÇÃO: Cadeias literais são interpretado incorrectamente pelo compilador de Visual C++ no Visual Studio 2010 quando as cadeias literais utilizam a codificação UTF-8 e contenham caracteres asiáticos

Para obter uma versão do Microsoft Visual Studio 2008 do presente artigo, consulte 980263.

Sintomas

Considere o seguinte cenário:

  • Criar um projecto de Visual C++ no Microsoft Visual Studio 2010.

  • Um ficheiro do projecto inicializa estreito cadeias literais. Estas cadeias literais contenham caracteres asiáticos e não têm como prefixo com a letra "l".

  • O ficheiro foi guardado utilizando a 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:

  • Quando o ficheiro contiver uma marca de ordem de bytes (BOM), a operação de compilação é efectuada com êxito. No entanto, as cadeias literais são ainda ser apresentados incorrectamente na aplicação gerada. Além disso, poderá receber a seguinte mensagem 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

  • A operação de compilação falha. Além disso, poderá receber a seguinte mensagem de aviso quando compilar o projecto:

    Aviso C4129: 'carácter': não reconhecido a sequência de escape de carácter.

Causa

Este problema ocorre porque o compilador assume que os literais no ficheiro podem ser interpretados como o byte de MBCS codificação em vez de como Unicode de byte único. Devido a este problema, o compilador incorrectamente converte o ficheiro.

Resolução

Para resolver este problema, aplique esta correcção para o computador em que compilar o projecto. Em seguida, guarde o ficheiro com uma marca de ordem de bytes e, em seguida, adicione a seguinte directiva de "pragma" antes das cadeias literais no ficheiro de origem:

#pragma execution_character_set("utf-8")

Nota A presente directiva "pragma" define a unidade de tradução para o ficheiro de origem até que a presente directiva "pragma" é substituída por outra directiva "pragma".

Obter mais informações sobre esta correcção

Informações sobre correção

Agora tem uma correcção suportada disponível na Microsoft. Contudo, destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde o próximo que contenha esta correcção. Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa dos números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportNota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados se um Técnico de Suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas e questões de suporte adicionais que não sejam qualificáveis para a atualização específica em questão.

Pré-requisitos

Tem de ter o Microsoft Visual Studio 2010 instalado para aplicar esta correcção.

Informações sobre reinício

Não é necessário reiniciar o computador depois de aplicar esta correcção.

Informações de ficheiro

A versão inglesa desta correção tem os atributos de ficheiro listados na tabela que se segue (ou atributos de ficheiro posteriores). As datas e horas destes ficheiros estão listadas no formato de Hora Universal Coordenada (UTC). Quando visualizar as informações dos ficheiros, estas serão convertidas na 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

16.0.30319.351

658,240

23-Aug-2010

06:45

x86

C1.dll

16.0.30319.351

723,776

23-Aug-2010

06:45

x86

C1.dll

16.0.30319.351

899,400

23-Aug-2010

06:45

x86

C1xx.dll

16.0.30319.351

2,286,920

23-Aug-2010

06:45

x86

C1xx.dll

16.0.30319.351

2,428,232

23-Aug-2010

06:45

x86

C1xx.dll

16.0.30319.351

2,659,664

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

201,032

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

202,568

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

219,976

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

221,000

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

290,632

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

291,656

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

292,680

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

293,704

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

408,392

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

408,904

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

450,376

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

460,104

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

460,616

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

478,024

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

478,536

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

483,656

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

484,168

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

486,728

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

487,240

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

491,848

23-Aug-2010

06:45

x86

Clui.dll

16.0.30319.351

492,360

23-Aug-2010

06:45

x86

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×