• 5460阅读
  • 2回复

[提问]如何已知Unicode码值,通过qDebug()输出中文 [复制链接]

上一主题 下一主题
离线mjnewnew
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-23
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
Unicode  的2字节码值存在 qint6 uni_buf 中
现在我想把它以UTF-8的格式使用qDebug()输出,这样就可以调试,请问如何实现?

以UTF-8的格式原因是我使用嵌入式系统,输出串口软件监视工具设为了UTF-8编码。

离线mjnewnew

只看该作者 1楼 发表于: 2012-03-23
自问自答吧,找到解决方法了,首先前提是在main.cpp中设置解码:
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");

    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
同时别忘了以串口监视工具中设置解码方式为UTF-8(我使用了secureCRT)


然后:

quint16 resultbuf[11];
memset(resultbuf, 0, sizeof(resultbuf));

char utf8out[4]={0,0,0,0};
for (int i = 0; i < 10 i++)
  {
                 unicode_to_utf8(utf8out,(char *)(&resultbuf) );
                qDebug()<<QString::number(resultbuf,16)<<QString::fromUtf8(utf8out, 3);
  }

其中unicode_to_utf8 函数如下
void unicode_to_utf8(char* pOut,char* pchar)//本函数只适用于汉字转码,不适应于英文数字等

{
              // 注意 WCHAR高低字的顺序,低字节在前,高字节在后

              pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
              pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6);
              pOut[2] = (0x80 | (pchar[0] & 0x3F));

}





离线淳于半邪

只看该作者 2楼 发表于: 2012-03-23
找到就好,这些中文乱码问题解决的方法挺多的
快速回复
限100 字节
 
上一个 下一个