解决sprintf()和QString中文乱码问题

解决sprintf()和QString中文乱码问题

一、现象
QString str;
QString tip = QString::fromLocal8Bit("我是个好孩子:");
QString tip2 = QString::fromUtf8(tip.toUtf8().data());
str.sprintf("%s %d",tip2.toUtf8().data(), 14);
textEdit->setPlainText (str);

QString str;
QString tip = QString::fromLocal8Bit("我是个好孩子:");
str.sprintf("%s %d", tip.toUtf8().data(), 14);
textEdit->setPlainText (str);

二、sprintf

srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~

头文件:stdio.h

函数功能:格式化字符串,将格式化的数据写入字符串中。

函数原型:int sprintf(char *buffer, const char *format, [argument]...)

参数:

(1)buffer:是char类型的指针,指向写入的字符串指针;

(2)format:格式化字符串,即在程序中想要的格式;

(3)argument:可选参数,可以为任意类型的数据;

函数返回值:buffer指向的字符串的长度;

用处:

(1)格式化数字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, "%d", 123456);执行后buffer即指向字符串“123456”~

(2)连接以'\0'结束的字符串:

sprintf打印字符串必须以/0结尾作为结束。

因此,使用sprintf输出时,可能会因为没有结束的'\0'而多输出一些乱码或者字符。
 

 

三、解决办法
使用Qt fromLocal8Bit()函数可以设置编码。
Qt默认的编码是unicode,不能显示中文的
windows默认使用(GBK/GB2312/GB18030)
使用String::fromLocal8Bit()函数,实现了从本地字符集GB到Unicode的转换,用于处理汉语显示乱码等问题

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值