#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
//warning C4566: 由通用字符名称“\u00E4”表示的字符不能在当前代码页(936)中表示出来
//ä的UNICODE编码是 \u00E4, 在中文环境下,编译器不能把它转为GBK. 因为GBK中没有这个字符对应的编码。
//cpp源文件里,ä可以按照utf-8格式或ucs16保存,这就是问什么关闭项目,重新打开后,ä没有丢的原因。
//VS20XX IDE会从文件BOM头中识别当前源文件的编码方案。对于uft-8,bom=EF BB BF
//用ultra-edit打开生成的exe,用二进制模式查看。======...会很容易发现,查看应该是ä的位置,实际是? (0x3F)
//调试方式下,查看buff的值,也会看到ä的位置上,内存值是0x3F( 就是一个'?')
char buff[] = "=========================ä";
//增加下面这句也照样会出现warning C4566
//setlocale(LC_ALL,"chs");
//如果要解决C4566问题,办法是在“控制面板”->“区域与语言”->“更改系统区域设置”
//ä是德文的一个字符,所以把“当前区域设置”成德国。经过设置和系统重启生效,发现buff中ä被编码为0xe4, 编译生成exe正常。
//在VS20XX环境下测试一下,看能否输出正常。经测试不正常。
//然后,从cmd中执行exe。先打开cmd,调用chcp命令查询当前code page,确保是德语 code page 1252
//(如果console在启动后不是你希望的code page,则在这面这个注册表中,修改code page
// [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe])
// ( 如果不想改注册表,则每次打开cmd后,执行chcp 1252命令,转入德文环境)
//然后执行 本程序XX.exe. 输出正常。
//看来,从VS20XX中用调式代码的方式执行,与从cmd(shell)中启动exe,有很大差异。
//这个差异的原因,还需要再研究学习。
cout << buff << endl;
//如果在程序中,用硬编码的方式强制更改为德文环境,输出正常。
//这个办法,可以不用改注册表,也不用从cmd中执行前执行chcp 1252。
setlocale(LC_ALL,"German");
cout << buff << endl;
system("pause");
return 0;
} 学习笔记:解决 warning C4566
最新推荐文章于 2025-09-21 17:44:01 发布
本文探讨了在VS环境中遇到的C4566警告问题及其解决方案,通过更改系统区域设置或使用硬编码方式来解决特殊字符在不同编码间的转换问题。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言
2004

被折叠的 条评论
为什么被折叠?



