REVISIÓN: Los literales de cadena se interpretan incorrectamente por el compilador de Visual C++ en Visual Studio 2010 cuando los literales de cadena utilizan codificación UTF-8 y contienen caracteres asiáticos

Se aplica a: Visual Studio 2010

Para obtener una versión de Microsoft Visual Studio 2008 de este artículo, consulte 980263 .

Síntomas


Imagine la siguiente situación:
  • Crear un proyecto de Visual C++ en Microsoft Visual Studio 2010.
  • Un archivo en el proyecto inicializa los literales de cadena de caracteres estrechos. Estos literales de cadena contienen caracteres asiáticos y no llevan el prefijo con la letra "l".
  • Se guardó el archivo utilizando la codificación UTF-8.
En este escenario, cuando se compila el proyecto, los literales de cadena se interpretan incorrectamente por el compilador. Además, se encuentra con uno de los siguientes problemas:
  • Cuando el archivo contenga una marca de orden de bytes (BOM), la operación de compilación se realiza correctamente. Sin embargo, los literales de cadena todavía se muestran incorrectamente en la aplicación generada. Además, puede recibir el siguiente mensaje de advertencia cuando se compila el proyecto:
    Advertencia C4566: No se puede representar el carácter representado por el nombre de carácter universal 'xx' en la página de códigos actual.
  • Se produce un error en la operación de compilación. Además, puede recibir el siguiente mensaje de error cuando se compila el proyecto:
    Error C2078: Hay demasiados inicializadores
  • Se produce un error en la operación de compilación. Además, puede recibir el siguiente mensaje de advertencia cuando se compila el proyecto:
    Advertencia C4129: 'carácter': secuencia de escape de carácter no reconocida.

Causa


Este problema se produce porque el compilador supone que los literales en el archivo se puede interpretar como el byte inicial de codificación MBCS en lugar de un solo byte Unicode. Debido a este problema, el compilador traduce incorrectamente el archivo.

Solución


Para resolver este problema, aplique esta revisión en el equipo en el que se compila el proyecto. A continuación, guarde el archivo junto con una marca de orden de bytes y, a continuación, agregue la siguiente directiva de "pragma" justo antes de los literales de cadena en el archivo de origen:
#pragma execution_character_set("utf-8")
Nota Esta directiva "pragma" establece la unidad de traducción para el archivo de origen hasta que la presente Directiva "pragma" se sustituirá por otra directiva "pragma".

Para obtener más información acerca de este hotfix

Información de la revisión

Ahora hay una revisión compatible de Microsoft. Sin embargo, se pretende corregir el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Esta revisión puede ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere a la siguiente que contenga este hotfix. Para resolver este problema inmediatamente, póngase en contacto con los servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de números de teléfono de los servicios de soporte al cliente de Microsoft e información acerca de los costos de soporte técnico, visite el siguiente sitio Web de Microsoft:Nota En casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Requisitos previos

Debe tener Microsoft Visual Studio 2010 instalado para poder aplicar este hotfix.

Información de reinicio

No es necesario que reinicie el equipo después de aplicar este hotfix.

Información sobre los archivos

La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se expresan de acuerdo con la hora universal coordinada (UTC). Cuando vea la información del archivo, esta se convertirá a la hora local. Para conocer la diferencia entre la hora UTC y la hora local, use la pestaña Zona horaria del elemento Fecha y hora del Panel de control.
Nombre de archivoVersión de archivoTamaño de archivoFechaHoraPlataforma
C1.dll16.0.30319.351658,24023-Aug-201006:45x86
C1.dll16.0.30319.351723,77623-Aug-201006:45x86
C1.dll16.0.30319.351899,40023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,286,92023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,428,23223-Aug-201006:45x86
C1xx.dll16.0.30319.3512,659,66423-Aug-201006:45x86
Clui.dll16.0.30319.351201,03223-Aug-201006:45x86
Clui.dll16.0.30319.351202,56823-Aug-201006:45x86
Clui.dll16.0.30319.351219,97623-Aug-201006:45x86
Clui.dll16.0.30319.351221,00023-Aug-201006:45x86
Clui.dll16.0.30319.351290,63223-Aug-201006:45x86
Clui.dll16.0.30319.351291,65623-Aug-201006:45x86
Clui.dll16.0.30319.351292,68023-Aug-201006:45x86
Clui.dll16.0.30319.351293,70423-Aug-201006:45x86
Clui.dll16.0.30319.351408,39223-Aug-201006:45x86
Clui.dll16.0.30319.351408,90423-Aug-201006:45x86
Clui.dll16.0.30319.351450,37623-Aug-201006:45x86
Clui.dll16.0.30319.351460,10423-Aug-201006:45x86
Clui.dll16.0.30319.351460,61623-Aug-201006:45x86
Clui.dll16.0.30319.351478,02423-Aug-201006:45x86
Clui.dll16.0.30319.351478,53623-Aug-201006:45x86
Clui.dll16.0.30319.351483,65623-Aug-201006:45x86
Clui.dll16.0.30319.351484,16823-Aug-201006:45x86
Clui.dll16.0.30319.351486,72823-Aug-201006:45x86
Clui.dll16.0.30319.351487,24023-Aug-201006:45x86
Clui.dll16.0.30319.351491,84823-Aug-201006:45x86
Clui.dll16.0.30319.351492,36023-Aug-201006:45x86

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".