关于qt中文utf-8转gbk

笔者经历了糟心的两天时间,说多了都是泪,希大家有所帮助,不再同一个地方浪费时间。
笔者的任务:从数据库获取utf-8编码的含中文的字符串,并在Linux平台使用qt显示在表格中。
笔者所遇问题:中文始终为乱码,度娘上mian函数加类似下面的函数也并没用
QTextCodec *codec = QTextCodec::codecForName(“GBK”);
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
或者是调用qt提供的方法编写几个转换函数,逻辑大概是:utf->Unicode->gbk,类似下面的函数:
inline QString GBK2UTF8(const QString &inStr)
{
QTextCodec *gbk = QTextCodec::codecForName(“GB18030”);
QTextCodec *utf8 = QTextCodec::codecForName(“UTF-8”);

QString g2u = gbk->toUnicode(gbk->fromUnicode(inStr));			  // gbk  convert utf8
return g2u;

}

inline QString UTF82GBK(const QString &inStr)
{
QTextCodec *gbk = QTextCodec::codecForName(“GB18030”);
QTextCodec *utf8 = QTextCodec::codecForName(“UTF-8”);

QString utf2gbk = gbk->toUnicode(inStr.toLocal8Bit());
return utf2gbk;

}

inline std::string gbk2utf8(const QString &inStr)
{
return GBK2UTF8(inStr).toStdString();
}

inline QString utf82gbk(const std::string &inStr)
{
QString str = QString::fromStdString(inStr);

return UTF82GBK(str);

}
依然不能解决我遇到的问题,该是乱码还是乱码(╥╯^╰╥)。
大家也可以尝试上述方法,若能解决问题,那是最好不过了。
若还是不能解决问题,请往下阅读。


尝试个各种方法后,我有了自己编写转码函数的意图,然后查了下gbk编码和utf-8编码的规则,准备自己敲╮(╯﹏╰)╭。
当然我还是现在度娘上看了看有没有大佬已经干过这个事儿,果不其然被我找到了,哈哈( ̄▽ ̄)~*。
https://blog.csdn.net/qsir/article/details/78425199
大家可以阅读这篇文章,这位大佬还提供了源代码,真是太棒了,记得为大佬点赞哟!
转换出来是的gbk字符串是std::string类型的,qt显示需要Qstring类型,然后使用QString::fromstdstring(stdStr),结果还是乱码,勒个去o(╥﹏╥)o,头发都快抓掉完了,还是乱码。
不过不要担心,是有std::cout打印stdStr时发现终端上已经是正常的中文了,意味着确实转成gbk格式了,最后只需要调用
QString::fromLocal8Bit(stdStr.data()),即可在qt上显示正常的中文了,至此一切问题终于解决了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值