在网上搜集子大量信息,再经过自己的不断测试,试出了一些可行方法。
首先使用中文 必须告诉QT 使用什么编码. 然后在使用时注意转换使用的函数。
例子1 :http://www.qtcn.org/bbs/read-htm-tid-36076-fpage-27.html
我的程序中用QFiledialog::getOpenFileName获取文件名,再用fopen打开。
这个调用返回的filename是 QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中 文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”, 这样转换得到的是E:/????????/test.dat
请教,如何从这样的Qstring中得到含中文的字符串?
这个调用返回的filename是 QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中 文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”, 这样转换得到的是E:/????????/test.dat
请教,如何从这样的Qstring中得到含中文的字符串?
其解决办法是 最后试验成功,用filename.toLocal8bit().data()来得到字符串,中文就正常了
下面一些网页将 转换讲得比较详细
http://blog.csdn.net/u010411742/article/details/9062379
贴出来 我的代码
编码可用的
方式一:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
方式二:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
方式三:
QTextCodec *codec = QTextCodec::codecForName("GB18030");
//QTextCodec *codec = QTextCodec::codecForName("gb2312");
//QTextCodec *codec = QTextCodec::codecForName("UTF-8");
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
方式四:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QString aaa= QString("我是汉字工中服");
QString bbb="哈哈afaf394的AAA";
char *ad = aaa.toLocal8Bit().data();//.toLocal8Bit().data();
printf(" good! ad=%s,size=%d\n",ad,strlen(ad));
printf打印出来是正常的中文字符。但是使用 qdebug 函数打印出来还是乱码,这个不解,有待调查。
QT的一些函数
QString QString::fromAscii ( const char * str, int size = -1 )
QString QString::fromLatin1 ( const char * str, int size = -1 )
QString QString::fromLocal8Bit ( const char * str, int size = -1 )
QString QString::fromUtf8 ( const char * str, int size = -1 )