QT代码中直接使用中文之乱码解决
http://hi.baidu.com/ilinux/blog/item/3603b801e8ce5907738da581.html2008年03月04日 星期二 下午 12:23
在main文件中添加代码: #include
int main(int argc, char **argv) { .................... QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); .......................... } 这样在程序其他地方就可以使用中文了, tr(“中文”) 或者直接使用“中文”;
这样写不太爽 char *string = "中文和English混和字符串!" QTextCodec* gbk_codec = QTextCodec::codecForName("GBK"); QString gbk_string = gbk_codec->toUnicode(string); QLabel *label = new QLabel(gbk_string);
读取中文文件可以使用QTextStream文本流 QFile file("default.txt"); QTextStream stream(file,QIODevice::ReadOnly); stream.setCodeC( QTextCodec::codecForName("GB2312") ); stream.readAll();
|
|
WOWCode的主体部分基本已经完成了,对于我自己来说,其实已经足以应付我的需要了,不过如果发布的话,实在还是拿不出手,因为很多地方还需要完善,一些对我自己来说多余的功能也没有完成,今天尝试将程序移植到了另一台机子上,却出现了中文乱码问题,记录之。
也许你在用这个方法实现中文化,但它确实不够严谨Laguage» C++ Title» 出现频率最高的办法
- #include
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- //设置中文开始
- QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb18030″));
- //设置中文结束
- return app.exec();
- }
很多地方都会告诉你,这样可以实现QT支持中文,包括我看的教程书上也是,他甚至告诉我要支持中文必须加入这段代码,但我想告诉你,这个办法是有问题的,而且这个问题还不小!我在两台同样是XP系统的机子上移植就出现了中文乱码问题,而且所有中文都是用了tr()的。所以请别迷信那些教程,实践才是真理!
你可以尝试这个方法Laguage» C++ Title»
- #include
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- //设置中文开始
- QTextCodec *codec = QTextCodec::codecForName(“GB2312″);
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- //设置中文结束
- return app.exec();
- }
虽然这个方法看似更为严谨,你可以尝试,不过这么写还是会有问题,至少没有解决我的问题。这也是我网上看到的出现频率也挺高的方法,不过我想说的是:其实这个办法治标不治本,因为它后面只是对拓宽对中文支持的范围,而一般我们都建议把中文写在tr(“”)里。
推荐个比较保险的办法Laguage» C++ Title» 我推荐的方法
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QTextCodec *codec = QTextCodec::codecForName(“System”); //获取系统编码
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- return a.exec();
- }
这里获取了系统字体编码,解决了我的问题,个人也觉得这个办法应该是个不错的解决方案。
也可能是字体选择不当造成的乱码如果你始终解决不了乱码问题,可以尝试设置下字体,但其实是否是字体造成的乱码的方法很简单,如果出现的是一个个方块,便是字体设置不当,否则,优先考虑编码设置。
阅读(1495) | 评论(0) | 转发(1) |