公司代码有多国语言支持,遇到需要使用QString转char
网上很多人一碰到编码问题就无脑的Copy上面3行……
从Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
- QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
- QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
查了一上午最终发现只需要将文本编码方式转一下就好
转自:https://blog.csdn.net/AmyAndTommy/article/details/82256454
任何编码先转换成统一编码toUnicode(),然后再转出fromUnicode();
gb2312转utf8:
QString ssss=QString::fromLocal8Bit("ceshi我是测试"); //注意此处定义gb2312编码的方式,要使用fromLocal8Bit()
gb2312ToUtf8(ssss);
utf8转gb2312:
入参是utf8编码的字符数组
(注意参数的编码格式一定要对,否则转换不出来,尤其是gb2312ToUtf8()这个函数,极为容易传入unicode编码格式的参数)
上代码:
void gb2312ToUtf8(QString strGb2312)
{
printf("@@@ gb2312 str is:%s\n",strGb2312.toLocal8Bit().data());
QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
QString strUnicode= gb2312Codec->toUnicode(strGb2312.toLocal8Bit().data());
QByteArray ByteUtf8= utf8Codec->fromUnicode(strUnicode);
char *utf8code = ByteUtf8.data();
printf("@@@ Utf8 strGb2312toUtf8:%s\n",utf8code);
}
///
void utf8ToGb2312(char *strUtf8)
{
printf("~~~~ utf8 str is:%s\n", strUtf8);
QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
QString strUnicode= utf8Codec ->toUnicode(strUtf8);
QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode);
strUtf8= ByteGb2312.data();
printf("~~~~~ gb2312 strUtf8toGb2312:%s\n", strUtf8);
}
修改了一下utf8ToGb2312使之转换后的gb2312字符串类型为QString:
QString utf8ToGb2312(char *strUtf8)
{
printf("~~~~utf8 strUtf8:%s\n", strUtf8);
QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
QString strUnicode= utf8Codec ->toUnicode(strUtf8);
QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode);
strUtf8= ByteGb2312.data();
printf("~~~~~gb2312 strUtf8toGb2312:%s\n", strUtf8);
return QString::fromLocal8Bit(strUtf8);//注意这里要fromLocal8Bit()
}
转自:https://blog.csdn.net/AmyAndTommy/article/details/82256454