涉及到char *与QString的转换,且涉及到GBK、UTF8等编码时,用QTextCodec

涉及到char *与QString的转换,且涉及到GBK、UTF8等编码时,用QTextCodec

#include <QApplication>
#include <stdio.h>
#include <QTextCodec>
#include <QDebug>

void testCodec()
{
  setbuf(stdout, NULL);

  QTextCodec *codec = QTextCodec::codecForName("GBK");

  //1 GBK --> utf8
  char buf[10] = {0x31, 0x32, 0xD6, 0xD0}; //GBK编码,对应"12中"

  QString s1 = QString::fromLocal8Bit(buf);
  qDebug() << "test_QString:" << s1; //Windows下正常;Linux下乱码
  QString s2 = codec->toUnicode(buf);
  qDebug() << "test_QTextCodec:" << s2; //Windows下正常;Linux下正常

  //2 utf8 --> GBK
  QString utf8Str("中21");

  QByteArray ba1 = utf8Str.toLocal8Bit();
  const char *pStr1 = ba1.data();
  printf("test_QString: ");
  for (int i = 0; i < strlen(pStr1); i++)
  {
    printf("0x%X ", (unsigned char)pStr1[i]); //Windows:0xD6 0xD0 0x32 0x31 Linux:0xE4 0xB8 0xAD 0x32 0x31
  }
  printf("\n---------------\n");

  QByteArray ba2 = codec->fromUnicode(utf8Str);
  const char *pStr = ba2.data();
  printf("test_QTextCodec: ");
  for (int i = 0; i < strlen(pStr); i++)
  {
    printf("0x%X ", (unsigned char)pStr[i]); //Windows:0xD6 0xD0 0x32 0x31 Linux:0xD6 0xD0 0x32 0x31
  }
  printf("\n---------------\n");

}

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  testCodec();

  return a.exec();
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值