1)控制台中文乱码 解决方案
问题根源
中文显示乱码的原因是控制台设置的编码格式,如果控制台设置的编码格式是GBK,数据库的存储内容是UTF-8,当然无法正常显示
解决方案
1)启动CMD,查看当前的字符集编码,使用指令chcp
Active code page:65001 :UTF-8编码
活动代码页:936 :GBK编码
注意:很多用户希望能够在控制台下输入中文,必须使用指令chcp 936,切换到GBK编码格式,才能够正常输入
2)目前查看UTF-8编码的数据库文件,使用指令chcp 65001,切换到UTF-8编码字符集
3)进入到sqlite.exe程序的目录,启动sqlite.exe,这个时候正常显示UTF-8数据库内容
4)如果数据库内容是GBK编码,可以使用chcp 936。
2)VS调试:字符串中的字符无效
场景
网络发送过来的报文是utf-8编码的Json数据,其中保存有中文。使用Jsoncpp解析的时候单步调试获取到的变量,在获取包含中文变量的时候,查看std::string字符串变量,提示;字符串中的字符无效
解析
VS高版本新加的功能,如果字符串中包含有非打印字符,或者utf8编码,调试器自动显示:字符串中的字符无效。在这里被误导过,以为Jsoncpp无法正确解析utf-8编码的格式,其实Jsoncpp已经解析出内容,只是无法在这种情况下显示中文,必须是GBK编码才行
历程
std::string strName = root["name"].asString(); //name里面的中文字符:风雨在途
这个时候定位到strName,提示字符串中的字符无效
解决
将strName添加监视,在名称strName之后,添加,s8,就可以正常显示了
例子
名称 值
strName,s8 风雨在途