開發平台(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 了)