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


Síntomas


Imagine el siguiente escenario:
  • Crear un proyecto de Visual C++ en Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • Un archivo en el proyecto con literales de cadena de caracteres estrechos. Estos literales de cadena contienen caracteres asiáticos y no llevan el prefijo con la letra "l".
  • Los literales de cadena utilizan 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:
  • La operación de compilación se realiza correctamente. Sin embargo, los literales de cadena se muestran incorrectamente en la aplicación generada. Además, también puede recibir los siguientes mensajes 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

Causa


Este problema se produce porque el compilador supone que el archivo en la sección "Síntomas" tiene codificación MBCS. Debido a este comportamiento, el compilerincorrectly convierte el archivo.

Solución


Información de la revisión

Existe un hotfix disponible desde Microsoft. Sin embargo, esta revisión se diseñó para corregir únicamente el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Si la revisión está disponible para su descarga, hay una sección de "Descarga de revisión disponible" en la parte superior de este artículo de Knowledge Base. Si esta sección no aparece, envíe una solicitud al servicio de atención al cliente y soporte técnico para obtener la revisión.

Nota: Si se producen problemas adicionales o si se requiere cualquier otra solución, será necesario crear una solicitud de revisión independiente. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no califican para esta revisión específica. Para obtener una lista completa de los números de teléfono de servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft:Nota: El formulario de "Descarga de Hotfix disponible" muestra los idiomas para los que el Hotfix está disponible. Si no ve su idioma, es porque no hay una revisión para ese idioma.

Requisitos previos

Debe tener Visual Studio 2008 Service Pack 1 (SP1) instalado para poder aplicar este hotfix.

Requisito de reinicio

No es necesario que reinicie el equipo después de aplicar esta revisión si no se utiliza ninguna instancia de Visual Studio.

Información de reemplazo de revisión

Esta revisión no sustituye a otras revisiones.

Información de archivo

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 muestran en la hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento de Fecha y hora del Panel de control.
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
C1.dll15.0.30729.4987678,72009-Mar-201010:18x86
C1xx.dll15.0.30729.49872,204,48809-Mar-201010:18x86
C1xx.dll15.0.30729.49872,215,24009-Mar-201010:18x86
C1xx.dll15.0.30729.49872,339,65609-Mar-201010:18x86
C1xx.dll15.0.30729.49872,505,55209-Mar-201010:18x86
C1xx.dll15.0.30729.49872,891,59209-Mar-201010:18x64

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información


Para resolver el error en el compilador, instalar esta revisión y, a continuación, guarde el archivo junto con una marca de orden de bytes. Además, 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: La directiva "pragma" establece la unidad de traducción para el archivo de origen hasta que la directiva "pragma" se sustituirá por otra directiva "pragma".