症状
请考虑以下情形:
-
在 Microsoft Visual Studio 2008 Service Pack 1 (SP1) 中创建 Visual C++ 项目。
-
在项目中的文件具有窄字符串常值。这些字符串包含亚洲字符,并不能作为前缀以字母"l"。
-
字符串文本使用 utf-8 编码。
在这种情况下,当您编译项目时,字符串文本被错误地解释编译器。此外,您会遇到下列问题之一︰
-
此编译操作成功。但是,生成的应用程序中正确显示的字符串。此外,当您编译项目时,还可能收到以下警告消息︰
警告 C4566︰ 无法在当前代码页中表示字符表示的通用字符名称 xx。
-
编译操作将失败。此外,可能会在编译项目时收到以下错误消息︰
错误 C2078︰ 初始值设定项太多
原因
发生此问题是因为编译器假定的"症状"部分中的文件具有 MBCS 编码。由于这种行为,compilerincorrectly 翻译的文件。
解决方案
修补程序信息
可以从 Microsoft 获得受支持的修复程序。然而,此修补程序仅用于解决本文中描述的问题。仅对出现这一特定问题的系统应用此修补程序。
如果此修复程序可供下载,则在此知识库文章的顶部会出现“修补程序下载可用”部分。如果未显示此部分,将申请提交到 Microsoft 客户服务和支持,以获取此修复程序。 注意:如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于不符合此特定的修补程序的其他支持问题和事项将照常收取费用。有关 Microsoft 客户服务和支持电话号码或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站︰http://support.microsoft.com/contactus/?ws=support注意:"提供修补程序下载"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。
系统必备组件
您必须具有 Visual Studio 2008 Service Pack 1 (SP1) 要应用此修补程序的安装。
重启要求
不需要重新启动计算机,如果正在使用的 Visual Studio 实例不在应用此修补程序后。
修补程序替换信息
此修补程序不替代其他修补程序。
文件信息
此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
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 |
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
详细信息
若要解决该错误,编译器中的,安装此修补程序,然后保存该文件和字节顺序标记。另外,在源文件中添加下面的"杂注"指令之前的字符串。
#pragma execution_character_set("utf-8")
注意:"杂注"指令设置源文件的翻译单位,直到"杂注"指令替换为另一种"杂注"指令。