在開發中常會遇到顯示中文的情況,但是如果不加處理會出現亂碼的問題。
一般會有日誌亂碼和 窗體上的字體亂碼
原因:
vs2015 默認的編碼格式是GBK/GB312,而在輸出的時候,都是以utf-8 格式輸出的
所以會出現亂碼的情況
例如新建一個項目,將默認顯示的Hello World 改爲中文。
默認顯示:
將Hello World 改爲中文:
顯示:
解決:
方法一:修改默認的編碼格式
文件—>高級保存選項:
選擇 utf-8 無簽名 :注意: 無簽名,如果選擇有簽名,在移植到ios 或者 android 平臺,還是會出現亂碼!!!
然後再次運行:
還是出現了亂碼,這是爲什麼呢?
原因就是 Lable 標籤的字體庫。
我們可以在隨便網上下載一種中文字體庫,替換掉
例如,我下載了幼圓體:https://download.csdn.net/download/lijia1201900857/11226832
然後設置
auto label = Label::createWithTTF("小明", "fonts/youyuan.ttf", 24);
日誌打印也是一樣,可以直接修改編碼格式。
但是,這樣做也會有些問題。我們先把編碼格式改爲 GB2312
然後日誌輸出 一句中文:log("大家好")
會出現亂碼:
然後,將編碼格式改爲 utf-8 (無簽名),然後運行:
報錯:
錯誤 C2001 常量中有換行符
錯誤 C2143 語法錯誤: 缺少“;”(在“{”的前面)
這種只會在window 下出現,你可以在後邊加 空格或者一些字符 來解決,但是即使這樣也會有部分亂碼
不過這種情況,在ios 和android下是正常的。
方法二:使用XMl 資源文件
我們創建一個資源文件:例如 string.xml
<dict>
<key>welcome</key>
<string>歡迎你</string>
<key>dear</key>
<string>親愛的</string>
</dict>
然後代碼中調用
// 獲取資源文件
auto strings = Dictionary::createWithContentsOfFile("strings.xml");
// 根據 key 查找字體
auto str = ((String *)strings->objectForKey("welcome"))->getCString();
顯示結果:
這種方法不用改變編碼格式,而且比較規範。推薦使用
方法三:代碼轉換字體格式
即通過代碼將 Gb2312 格式轉爲utf-8 ,這種沒在代碼中使用,就不詳細介紹了。有興趣的可以網上搜索。