您现在的位置: 爱51代码网 >> 范文 >> 文章正文
Qt unicode转换db2312后显示问号

Qt unicode转换db2312后显示问号

Qt  unicode转换db2312后显示问号,为什么?我的开发环境ubuntu + Qt

代码里不要写ASCII字符以外的文字(包括中文)。
这样就没有任何问题。 转换出来时??也就是16进制3f3f,这表示你的转码过程中信息丢失了。或者说源字符串编码信息丢失了。
如果你确信这个unicode是正确的,可以一步步打印出来看看。简单来说这样做:
假设你的源字符串是UTF-8编码的汉字,如:"南",UTF-8编码是:E58D97, 假设你QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8");
那么 QString str1="南";
qDebug()<<"HEX of original UTF8:"<<str1.toAscii().toHex() 应该是E58D97
QByteArray targetStr = QTextCodec::fromUnicode(str1);
qDebug()<<"HEX of GB2312:"<<targetStr.toHex(); 应该是:C4CF
不放心自己的源码文件编码类型的可以这么做:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8");
QString str1=QObject::tr("南");
qDebug()<<"HEX of original UTF8:"<<str1.toAscii().toHex() 应该是E58D97
QByteArray targetStr = QTextCodec::fromUnicode(str1);
qDebug()<<"HEX of GB2312:"<<targetStr.toHex(); 应该是:C4CF

QByteArray targetStr = QTextCodec::fromUnicode(str1);
改为下面语句就OK了
QByteArray targetStr = QTextCodec::codecForName ("gbk")->fromUnicode (str1);

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    不小心卸载了.net 4 extend,vs2
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    E-business suite system servic
    Qt线程里面如何给一个结构体
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |