在开发中常会遇到显示中文的情况,但是如果不加处理会出现乱码的问题。
一般会有日志乱码和 窗体上的字体乱码
原因:
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 ,这种没在代码中使用,就不详细介绍了。有兴趣的可以网上搜索。