Qt中字符数组中文GBK编码转UTF-8并覆盖
如题,字符数组中保留中文且是GBK编码格式,在Qt中若是以UTF-8编码进行输出,会乱码,解决方式如下:
void gbkToUtf8(char *gbkstr)
{
QTextCodec *gbk = QTextCodec::codecForName("GB18030");
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
//创建str指针,开辟另一控件储存转换后的UTF-8编码
char *str = utf8->fromUnicode(gbk->toUnicode(gbkstr)).data();
//将原字符数组清空
char *clear = gbkstr; //将原字符数组地址附给指针clear,使gbkstr指向地址不作改变
while(*clear != 0x00) //0x00是“空”的意思,也就是' '
{
*clear = 0x00;
clear++; //后移一位,继续判断
}
//复制(覆盖)到原字符数组
strcpy(gbkstr,str);
}
为什么要第二部分清空原字符数组呢?
因为strcpy函数是按位覆盖,也就是说,当原字符数组所含有效字符比需覆盖的有效字符多的时候,’\0’后的字符无法被覆盖。
如:
char c[10] = "123456";
char d[10] = "abc";
strcpy(c,d);
printf("%c",c[4]);
//输出结果为:
5
阿猪米德
2019.05.31于湖北武汉