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

在网上搜集子大量信息,再经过自己的不断测试,试出了一些可行方法。

首先使用中文 必须告诉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://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 )

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值