聊聊字符编码那些事

聊聊字符编码那些事

由于时间有限,文本会持续更新中…
资料参考链接如下:
字符编码的历史演变
计算机字符编码的历史

Windows操作系统的字符编码集

在WIndows操作系统下可以通过命令行模式查看系统使用的字符集,如下图所示:
通过命令行模式查看操作系统当前使用的字符集
从图中看到,活动页代码为936,代表GB2312(简体中文)。作者的个人计算机安装的是Windows10简体中文版。

VS IDE

Microsoft Visual Studio集成开发环境采用的字符编码是操作系统使用的字符编码。

Qt Creator IDE

Qt Creator集成开发环境的字符编码,可以设置,如下图所示。作者的Qt Creator版本为4.2.0(Community)
Qt Creator选择文件编码方式步骤1
Qt Creator选择文件编码方式步骤2
这里需要注意,选择文件编码后重启Qt Creator设置才能生效。

QString

QString使用的是Unicode编码,在不通过QTextCodec类设置QString的编码方式下,QString的构造函数默认调用fromLatin1函数将字符串转为Unicode编码(即QString认为字符串采用的是Latin1编码)。在这种情况下输入中文就会显示乱码,因为Latin1编码无法解释中文,更不用说转换为Unicode编码后正确显示中文了。有以下两种方法可以避免中文显示乱码的方法。

1. 局部编码

    // GB2312转Unicode 局部编码
    // 方法A
    QByteArray gbk2312String = "中文";    // 文件的编码方式为GB2312,所以“中文”这两个字的编码方式为GB2312
    QTextCodec *codec = QTextCodec::codecForName("GBK");    // 函数输入参数GBK,代表了三种中文编码方式,即GB2312/GBK/GB18080
    QString strUnicode = codec->toUnicode(gbk2312String);
	
    // 方法B QString的静态函数fromLocal8Bit()执行的编码转换依赖于QTextCodec类的codecForLocale()函数。如果本地操作系统是GB2312,则fromLocal8Bit()负责将GB2312转换为Unicode编码。注意!如果此时文件编码与操作编码不同,则中文还是会显示乱码!所以,文件编码决定了采用何种编码转换为Unicode编码
    QString strUnicode = QString::fromLocal8Bit("中文");
    ui->label->setText(strUnicode);

2. 整体编码

    // GB2312转Unicode 整体编码
    // 方法A
    QTextCodec *codec = QTextCodec::codecForLocale();
    QTextCodec::setCodecForCStrings(codec); // 通过调用该函数,使得QString在调用构造函数时将本地操作系统编码转换为Unicode编码。注意!如果此时文件编码与操作系统的编码不同,则中文还是会显示乱码!
    // 方法B
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForCStrings(codec);
    QString strUnicode = "中文";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值