Qt解决中文乱码QTextCodec

Qt解决中文乱码QTextCodec

  • 【1】QTextCodec简介
  • 【2】QTextCodec源码

在这里插入图片描述

在这之前了解一些编码未尝不是一件美事,如果只是在电脑,解决编码乱码UTF_8和GB2313都没用,可以设置为GBK试过有用


【1】QTextCodec简介

计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。
ASCII,GB2312,GBK,Unicode, UTF-8,BOM这些东西是干啥的,源码字符集,执行字符集是什么?
字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码


ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是*于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以勉强显示其他西欧语言。它是现今最通用的单字节编码系统(但是有被Unicode追上的迹象),并等同于国际标准ISO/IEC 646。

ASCII字符集主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。

ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。


GB2312或GB2312-80是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·*本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。GB2312的出现,*本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现

【2】QTextCodec源码

我使用的是Qt永久版Qt 5.9.0和5.9.1永起来都很不错,这是默认的编码设置

Qt解决中文乱码QTextCodec_第1张图片

Qt解决中文乱码QTextCodec
Qt解决中文乱码QTextCodec_第2张图片

#include "mainwindow.h"
#include 
#include 
int main(int argc, char *argv[])
{
    //解决汉字乱码问题
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
//测试是否显示乱码
void MainWindow::on_PB_codec_clicked()
{
    ui->PB_codec->setText("我是中文");
}

Qt解决中文乱码QTextCodec_第3张图片

持续更新


你可能感兴趣的:(QT,界面开发工程师课程,qt,windows,QTextCodec,c++,UTF-8)