关于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"));
QString
aaa=
QString("我是汉字工中服");
printf打印出来是正常的中文字符。但是使用qdebug函数打印出来还是乱码,这个不解,有待调查。
QT的一些函数
QString
QString::fromAscii
(const
char
*str,
int
size=
-1)
首先使用中文必须告诉QT使用什么编码.然后在使用时注意转换使用的函数。
例子1:
我的程序中用QFiledialog::getOpenFileName获取文件名,再用fopen打开。
这个调用返回的filename是QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”,这样转换得到的是E:/????????/test.dat
请教,如何从这样的Qstring中得到含中文的字符串?
其解决办法是最后试验成功,用filename.toLocal8bit().data()来得到字符串,中文就正常了
下面一些网页将转换讲得比较详细
贴出来我的代码
编码可用的
方式一:
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)
相关文章推荐
- 关于MySQL中文字符出现乱码的问题
- 关于QT调用MFC动态库时传递中文字符乱码问题
- QT 5.9版本 使用MSVC2015编译时出现中文字符乱码问题的解决方法
- 关于iOS打印NSDictionary中文字符出现乱码
- PHP substr截取中文字符出现乱码的问题解疑
- osg 中显示中文字符出现乱码问题
- QT中出现的中文乱码问题
- 关于使用ZXing扫描二维码出现中文乱码的问题
- ReadString在UNICODE下中文乱码的解决办法(Char型字符和Unicode字符的转换问题)
- 关于在servlet跳转中出现的中文乱码问题
- php、asp.net关于后台设置的cookie前台JS获取时出现中文乱码问题解决
- 关于PLSQL出现中文乱码问题
- 关于QT,C++,MySQL之间中文乱码问题的简单解决
- 关于客户端与服务器ajax使用json数据交互,出现中文乱码或因包含html标答而报错的问题(base64加密)
- 关于QT5.4+VS2010\VS2013使用过程中,中文乱码的问题
- PHP substr截取中文字符出现乱码的问题解疑
- Qt5下socket传输中文字符乱码的问题
- php关于使用iconv(...)函数对字符进行中文转换时,遇到的一个问题
- 关于tomcat中文乱码问题,为什么要先转换为ISO-8859-1!
- fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题