C++和Qt编码格式

110 篇文章 5 订阅

编码格式

  • UCS-2:Unicode刚开始时,用恒定两个字节表示所有字符,只有65536个字符空间。
  • UTF-16:Unicode字符超过65536时,参考【多字节编码】,将两字节扩展至四字节表示所有字符。
  • UTF-8:便于网络传输和兼容ASCII码,按照规则组合1~4字节来表示字符。
  • UTF-32/UCS-4:直接使用4字节编码所有字符。

Windows的历史

  • Unicode不成熟时,Windows使用多字节编码来支持各种语言的。
  • WinNT版本之后,Windows内核使用UTF-16来编码,但仍支持多字节编码。
  • UTF-16的API以W结尾,多字节API以A结尾。

C++和Qt对字符串编码的区别

  • C++中std::string使用gbk,使用中文没有问题。
  • Qt为更好兼容国际化,使用了UTF-16作为编码格式。
  • Qt中定义的中文字符串,会自动经历一次有【多字节编码】转换为UTF-16的过程。

Qt编码方法

  • Qt 4.x默认多字节编码是Latin-1(西欧多字节编码);Qt 5.x默认编码是UTF-8。
  • const char*隐式转换为QString,使用QTextCodec::codecForCStrings()。
  • Qt的函数QObject::tr(),是将const char* 转换为QString,使用QTextCodec::codecForTr()。
  • QTextCodec::codexForLocal()是指用当前系统所用编码,一般中文Windows是gbk,中文Linux是UTF-8。

Qt编码问题

  • 使用codexForLocal()编码,在中文环境正常使用,非中文环境就会出现悲剧。
  • 使用GBK编码的程序,容易有悲剧。

Qt正确编码的方式

  • 设置默认编码方式

Qt支持中文输出

  • 使用宏,支持中文字符

       #pragma execution_character_set("utf-8")

  • 或者使用QStringLiteral("xx")

#pragma execution_character_set("utf-8")

void fun()
{
    QString s1="编码有什么难的-1";
    qInfo()<<"s1= "<<s1;
}

其它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值