linux qt默认编码方式是什么,QT编码方式

本文详细探讨了Qt中QString的内部编码(Unicode),以及在Linux和Windows环境下默认编码的区别。当从char*转换到QString时,需要指定正确的编码,如GBK、BIG5或Latin-1。在不明确指定的情况下,Qt会默认选择Latin-1,可能导致乱码。解决方法包括使用QTextCodec进行编码转换,并通过QTextCodec::setCodecForCStrings设置默认编码。此外,还提供了不同编码之间的转换示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串常量、"中文"是传统的char类型的窄字符串、在使用的时候只需要告诉QString这两个汉字采用的编码构造QString。

const char * str = "中文";

QString qstr = str; //相当于调用QString::QString(const char * str)初始化一个QString

概念1:源文件是有编码的

"中文" 在不同的编码下对应不同的二进制形式

可能在GBK编码下是:ce d2 ca c7

在Latin-1编码下是:ba ba d7 d6

概念2:QString内部采用的是Unicode

一个问题,源代码中假如有4个字节"\xce\xd2\xca\xc7“该怎么转换成Unicode并存储在QString内。按照GBK、BIG5、Latin-1还是其他方式...

在你不告诉它的情况下,它默认选择了Latin-1,于是4个字符"ÎÒÊÇ"的unicode码被存进了QString中。最终,4个Latin字符出现在你期盼看到2中文字符的地方,所谓的乱码出现了

解决方式

问题很简单,当你需要从窄字符串 char*

转成Unicode的QString字符串的,你需要告诉QString你的这串char*

中究竟是什么编码?GBK、BIG5、Latin-1

理想情况就是:将char* 传给QString时,同时告诉QString自己的编码是什么

就像下面的函数一样,QString的成员函数知道按照何种编码来处理 C 字符串

QString QString::fromAscii ( const char * str, int size = -1 )

QString QString::fromLatin1 ( const char * str, int size = -1 )

QString QString::fromLocal8Bit ( const char * str, int size = -1 )

QString QString::fromUtf8 ( const char * str, int size = -1 )

QString 只提供了这几个成员函数,远远满足不了大家的需求,比如,在简体中文Windows下,local8Bit是GBK,可是有一个char串是 BIG5 或 Latin-2怎么办?

可以使用强大的QTextCodec,首先QTextCodec肯定知道自己所负责的编码的,当你把一个char串送给它,就能正确将其转成Unicode

QString QTextCodec::toUnicode ( const char * chars ) const

可是这个调用太麻烦了

想直接

QString a= str;

QString a(str);

这样一来肯定没办法同时告诉 QString 你的str是何种编码了,只能通过其他方式了。

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

设置QStrin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值