使用QString定义一个中文字符串,发现了很无语的问题,能否识别汉字竟然与汉字的个数有关!!!
我使用的是qt-creator,编译器是Microsoft Visual C++ Compiler 10.0 (MSCV)。
查看creator编辑->选择编码,里面默认UTF-8编码。
#include "widget.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
// QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
//QString str1("我"); // error, C2001:newline in constant
//QString str2("我我"); // OK
//QString str3("我我我"); // error
//QString str4("我我我我"); // OK
//QString str5("我我我我我"); // error
//QString str6("我我我我我我"); // OK
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
QString定义英文肯定是没有问题的,为了定义中文,按照网上的结果,设置编码格式,分别尝试过UTF-8和GBK。当输入的中文个数不同时,结果也不同,详细见代码!奇数个汉字全部报错了,偶数个汉字全部通过编译!!!
请问这是怎么回事?!
------解决思路----------------------
http://www.qtcn.org/bbs/read-htm-tid-54663.html
Qt5 C++源码中使用中文的简单步骤
------解决思路----------------------
对于Qt4和VS2010搭配,可以选择utf8或gbk执行字符集。
但是源码字符集用不带BOM的utf8,执行字符集用GBK,对VS2010是有问题的
------解决思路----------------------
如果你没有跨平台要求,也没有移植到Qt5的要求。
在简体中文Windows下,对Qt4和MSVC来说,最简单的方法就是 源码采用GBK,执行字符集也使用 GBK
------解决思路----------------------
对MSVC系列来说,源码字符集
1. 使用本地字符集,也就是说,在简体中文系统下使用GBK,繁体中文下使用BIG5, ...
2. 使用带BOM的unicode字符集,包括UTF8,UTF16等
对MSVC系列来说,执行字符集
1. 默认是本地字符集
2. 对MSVC2010,MSVC2013,打过补丁的MSVC2008,可以加一个pragma 来告诉编译器使用 UTF8字符集。
对Qt4来说,作为一个库,它不知道你的执行字符集是什么,如果你的执行字符集不是Latin1,且使用了非ASCII字符,你需要通过setCodecXXX 来告诉它 那你的执行字符集是什么。
----------
另外,如果你这儿的描述属实,那就是MSVC的BUG,可是,据我所知,MSVC2010没有这种BUG。