开发平台(Platform): (Ex: Win10, Linux, ...)
WindowXP Windows7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Visual Studio 2010~2015
问题(Question):
我在VS上面使用档头有BOM的UTF8程式码
但是程式码上的中文最后输出都会变乱码
输出到console视窗、输出成图片、输出到支援UTF8的GUI工具上
一样的程式码在MinGW上就很正常
我觉得程式码里的中文字是被编译器转成其他编码的
因为我把中文字另外存在外部的XML等文字档上就没问题
(程式执行后才加载的字码不会被编译器更改)
请问我该修改Visual Studio上的哪个选项?
可以的话告诉我2012的做法
不然2010~2015的其中一版也可以
你是不是忘了用 L"字串" 或是 _T("字串")
L是宽字符,UTF8格式下的英文字还是只用8bitstd::basic_string<char>不可装L"",但是可以装UTF8
然后你就直接把 char 送进 ANSI API ? 这样当然是乱码
作者:
colako (凯风快晴)
2017-09-14 00:03:00一定要与MinGW共用的话, 把中文转成code point吧用VS,_UNICODE如果不存UTF-16, 直接把中文写在.cpp很麻烦
不是啊你用 VS2010 然后跟我说 _T() 是旧时代的东西就像 colako 说的,VS 不用 UTF-16 会有各种问题
在中文系统下,ANSI默认不是UTF-8吧我觉得可能要把输出的片段贴出来,不然感觉很难帮忙不过从外部读取可以对,感觉好像真的就是源码的问题
我觉得应该说是 compiler 在处理源码编码时的问题
在专案上右键>属性>一般>字符集改unicode看看?
回Sch大:我是这个意思,不过推文有字数限制就省略了@@不过我昨天有看到说法是VS会根据各档案BOM决定编码
作者: stucode 2017-09-14 14:30:00
我猜你想找的是 std::string str = u8"abcd中文abc";顺带一提,这是C++11的东西。默认2010不行,2015可以。
好招!我先记下来,可惜2012没支援到u8"str"这个功能
作者:
LPH66 (-6.2598534e+18f)
2017-09-14 15:53:00唔, 我贴的那页是给 2015 的说明, 不确定是什么时候出现的(标题下面就写了 Visual Studio 2015 了)