[問題][部份解決] 如何阻止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