Qt中字符数组中文GBK编码转UTF-8并覆盖

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于湖北武汉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值