关于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://www.verydemo.com/demo_c278_i6329.html
 
http://blog.csdn.net/fldx/article/details/6262172

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("我是汉字工中服");

      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 )

 

 

 

你可能感兴趣的:(关于QT 字符转,特别是中文字符 转换出现乱码的问题。)