QString乱码笔记

3 篇文章 0 订阅

一.转换

QString 转 LPCSTR     toLocal8Bit
QString 转 LPCWSTR    utf16
QString 转 char*      toLocal8Bit().data()toStdString() (在sprintf中用到)

char* 转 QString      QString(QLatin1String(ch));
string转QString       qstr = QString::fromStdString(str);
string转char数组      c_str()

QString转char数组
char configFilename[MAX_PATH];
memcpy(configFilename,configFile.toLatin1().data(),MAX_PATH);

二.VS

2.1 下载

下载“ForceUTF8(NoBOM)”工具(VS2017连网下载若只是计划安装(不太会用),建议网上单独下载)。

2.2 使用

A.编译默认不修改文件编码方式,只有点击保存才会改编码方式。
B.vs设置(“c/c++”,“命令行”,"其它选项 “后面添加”/utf-8 "),猜测同时设源码字符集、执行字符集为utf-8

三.QtCreator

#pragma execution_character_set("utf-8")

使用该方式的源码文件,在VS2017中编译会报错(个人在vs中会屏蔽上面这句)。
同时可能出现另一编译报错(中文字为单数个之类的),暂改用步骤四方法解决。

四.cmake

add_compile_option("/utf-8")

猜测类似设置VS字符集。

五.编码知识

源码字符集:源码文件是使用何种编码保存的
执行字符集:可执行程序内保存的是何种编码(程序执行时内存中字符串编码)

文件字符集:
编译器字符集:VS-cl(GBK),Mingw-g++(utf-8),Linux-g++(utf-8BOM)
操作系统字符集:大陆简体中文windows(GBK/local8Bit),港澳台windows(BIG5),欧洲windows(Latin-1),Linux(一般utf-8)

Qt5中QString内部采用unicode字符集,utf-16编码。构造函数QString::QString(const char *str)默认使用fromUtf8(),将str所指的执行字符集从utf-8转码成utf-16。
由上面fromUtf8()可知,QString需要执行字符集编码为utf-8,然后以utf-8进行解码,再编码为utf-16才能获得正确的字符编码。
显示中文乱码的原因其实就是QString转码方式与执行字符集不一致。(比如,源字符集为本地字符集GBK编码,QString以utf-8的方式进行解码,会导致获得错误的二进制编码,再将错误二进制转为utf-16就会出现乱码。)
所以这可能就是#pragma execution_character_set(“utf-8”)再同时用QString::fromlocal8bit会乱码的原因,fromlocal8bit可能会因为不再是local8bit冲突。

六.参考链接

qstring乱码 qt4_QString::QString 中文乱码
谈QString
彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值