1,VC中查询所有含中文字符串
使用正则表达式,查询内容为:
(".*[u4E00-u9FA5]+)|([u4E00-u9FA5]+.*")
这样,就可以把代码中的中文都查询出来.对处理QT5中的中文问题,很有帮助.
2,VC环境下,QT5中文的处理
VC环境下,提供两种编码文式,UNICODE,和多字节字符集,而QT5中使用的字符集为UTF-8,要正确处理QT5中的中文情况,要注意以下几点:
A,QT5内部都是UTF-8编码在处理,不需要转换了,一个典型的问题,就是中文目录的问题,所有通过QT5获取的中文目录本身就是UTF-8格式,系统可以识别,不需要像QT4那样,需要转换成本地编码方式.静态字符串目录的转换,与QT5中文字符串的处理一样.
B,VC下静态字符串如果含有中文的话,如果是多字节字符集,本人测试以下三种情况有效:
QString str=QStringLiteral("测试");
QString str=QString().fromLocal8Bit("测试");
QString str=QString().fromUtf16(L"测试");
C,QT5与其他非QT5库的字符串转换
QString转char*:QString().toLocal8Bit();
QString转wchar*:QString().toUtf16();
如果不进行这样的转换,在非QT5库中得到的,就是乱码.
以上,QT5所遵循的原则就是,进入QT5的字符串,无论是哪种编码方式,都得转成UTF-8(QT5默认),从QT5出来的字符串,需要根据情况来处理.
本人测试了把C++代码文件转成UTF-8编码格式,希望统一QT5的编码处理,就像平时一样,不需要转换,但是没有成功,可能是我的测试方法不正确,也可能是VC自己的原因.
在网上查资料,QtCreater中,把C++代码文件的编码方式改成UTF-8,就没有编码转换的问题.本人没有测试过,因为对些不熟悉,一直用VC.
如果这种方式是正确的,那可能就与VC的编码处理方式有关吧.