您的位置:首页 > 编程语言 > Qt开发

关于QT 字符转,特别是中文字符 转换出现乱码的问题。

2013-08-07 11:48 447 查看
在网上搜集子大量信息,再经过自己的不断测试,试出了一些可行方法。

首先使用中文必须告诉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.toLocal8bit().data()来得到字符串,中文就正常了

下面一些网页将转换讲得比较详细
http://www.verydemo.com/demo_c278_i6329.html

/article/9757469.html

http://m.oschina.net/blog/90348
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("我是汉字工中服");

QStringbbb="哈哈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)

QStringQString::fromLatin1(constchar*str,intsize=-1)

QStringQString::fromLocal8Bit(constchar*str,intsize=-1)

QStringQString::fromUtf8(constchar*str,intsize=-1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: