[问题][部份解决] 如何阻止Visual Studio改变字串编码?

楼主: eye5002003 (下一夜)   2017-09-13 22:11:35
开发平台(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的其中一版也可以
作者: Schottky (顺风相送)   2017-09-13 22:38:00
你是不是忘了用 L"字串" 或是 _T("字串")
楼主: eye5002003 (下一夜)   2017-09-13 22:58:00
我的情况其实不该加L,但是我有试过一样不行
作者: Schottky (顺风相送)   2017-09-13 23:06:00
什么状况下处理 UTF8 字串却不该加 L ?
楼主: eye5002003 (下一夜)   2017-09-13 23:32:00
L是宽字符,UTF8格式下的英文字还是只用8bitstd::basic_string<char>不可装L"",但是可以装UTF8
作者: Schottky (顺风相送)   2017-09-13 23:38:00
然后你就直接把 char 送进 ANSI API ? 这样当然是乱码
作者: colako (凯风快晴)   2017-09-14 00:03:00
一定要与MinGW共用的话, 把中文转成code point吧用VS,_UNICODE如果不存UTF-16, 直接把中文写在.cpp很麻烦
作者: Schottky (顺风相送)   2017-09-14 00:59:00
不是啊你用 VS2010 然后跟我说 _T() 是旧时代的东西就像 colako 说的,VS 不用 UTF-16 会有各种问题
作者: a27417332 (等号卡比)   2017-09-14 01:15:00
在中文系统下,ANSI默认不是UTF-8吧我觉得可能要把输出的片段贴出来,不然感觉很难帮忙不过从外部读取可以对,感觉好像真的就是源码的问题
作者: Schottky (顺风相送)   2017-09-14 01:32:00
我觉得应该说是 compiler 在处理源码编码时的问题
作者: james732 (好人超)   2017-09-14 09:59:00
不用L或_T的话不会变成big5编码吗?
作者: shadow0326 (非议)   2017-09-14 11:15:00
在专案上右键>属性>一般>字符集改unicode看看?
作者: a27417332 (等号卡比)   2017-09-14 11:42:00
回Sch大:我是这个意思,不过推文有字数限制就省略了@@不过我昨天有看到说法是VS会根据各档案BOM决定编码
作者: LPH66 (-6.2598534e+18f)   2017-09-14 12:45:00
https://msdn.microsoft.com/en-us/library/mt708821.aspx这个选项应该是你要的答案搜寻关键字: visual studio c++ source encoding连结里也有说要怎么在 Visual Studio 里找到那个选项
作者: shadow0326 (非议)   2017-09-14 13:46:00
那个测试程式在MinGW会输出UTF-8文件!?
作者: stucode   2017-09-14 14:30:00
我猜你想找的是 std::string str = u8"abcd中文abc";顺带一提,这是C++11的东西。默认2010不行,2015可以。
楼主: eye5002003 (下一夜)   2017-09-14 14:53:00
好招!我先记下来,可惜2012没支援到u8"str"这个功能
作者: LPH66 (-6.2598534e+18f)   2017-09-14 15:53:00
唔, 我贴的那页是给 2015 的说明, 不确定是什么时候出现的(标题下面就写了 Visual Studio 2015 了)
作者: a27417332 (等号卡比)   2017-09-14 16:09:00
喔喔,终于看懂问题了,不过上面也有人给解答了

Links booklink

Contact Us: admin [ a t ] ucptt.com