最近用QT,需要在界面上显示中文,发现QT无法直接在代码中写中文,只能通过曲线救国的方式,比如用QT语言家,QTextCodec的fromloca8bit

研究了半天,终于明白了一些编码的问题

1.VS的编码保存到内存中是以何种编码保存到内存里面的

这个是根据VS的文件->高级保存选项里面的编码来决定的

比如"空间打开"这四个字,在下面的几种编码,

UNICODE UTF-8 BIG ENDIAN

UNICODE

UNICODE UTF-8 带签名

以上都是以GBK的编码编译进内存里面,比如下面的代码

const char *h = ("空间打开");

我们查看h内存地址的内容,会发现十六进制是bf d5 bc e4 b4 f2 bf aa,查看GBK的编码,发现这段十六进制就是这四个字的GBK编码

UNICODE UTF-8无签名则是以UTF-8存储进去,上面这四个字则是e7 a9 ba e9 97 b4 e6 89 93 e5 bc 80,查询后发现这个是UTF-8编码

为什么UTF-8无签名可以让QT正确显示,但是UNICODE以及UNICODE BIG-endian 以及UNICODE 带签名和UTF-7不能让QT正确显示,这个涉及到QString的默认处理方式,查看3

2.文件保存的编码以及属性页里面的字符集设置有什么区别

属性页里面的字符集设置是定义一个宏,比如UNICODE来调用不同的函数,比如CreateFile其实有CreateFileA和CreateFileW两个版本,这个设置的主要是让编译器自动选择不同的函数,跟把我们字符串编译进内存里面没什么关系

3.QT默认QString是以何种编码的

我们查看QString的代码,从QString的构造函数查看下去,发现构造函数调用这么一行代码

QString s = fromUtf8(str, size);

也就是说,QString默认是把所有的输入字符串都看成UTF-8的输入,fromUtf8会把 UTF-8的字符串转换成Unicode

4.为什么UNICODE UTF-8无签名会无法编译过去 比如三个的中文"文件名"

这个暂时没找到问题

4.QT create中为什么中文是"\数字"这种

这个是直接把中文的UTF-8编码转换成八进制,这个经过QString的处理后,就可以正确显示成UNICODE了,如果把对应的八进制转换成十六进制,然后再查询UTF-8的编码表,会发现对应的十六进制就是UTF-8的数值

QT显示中文的几个问题的更多相关文章

  1. 【ARM-Linux开发】ARM板卡上QT显示中文

    平台:Freescale imx6  编译系统:yocto  Qt版本:5.5.1 刚弄了个Qt程序到开发板,发现中文都没有显示,英文可以显示.  就加了个中文字库.DroidSansFallback ...

  2. QT显示中文 连接上文

    1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...

  3. Qt之中文显示(QMessageBox、QLineEdit右键菜单等)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101art3.html 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候 ...

  4. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...

  5. 如何让移植的嵌入式ARM显示中文汉字

    如果你急于在ARM开发板上看到Qt显示中文,而不介意稍次的效果,可以在运行Qt程序时,增加设置字体的参数,比如运行名为hello的Qt程序:./hello -fn unifont 1.首先,需要文泉驿 ...

  6. 嵌入式qt显示中文和隐藏鼠标

    最近项目快接近尾声了,要把项目移植到板子上,但是板子上的系统没有安装字库,导致中文无法显示,并且有一个很讨厌的鼠标光标(又没有鼠标),上网找了一些解决方案,记录一下 qt显示中文: 如果你急于在ARM ...

  7. Qt支持中文显示

    Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...

  8. Qt使用MSVC编译器不能正确显示中文的解决方案

    用VisualStudio做为IDE,使用Qt框架,显示中文,会出现乱码的情况. 原因:MSVC编译器虽然可以正常编译带BOM的UTF-8编译的源文件,但是生成的可执行文件的编码是Windows本地字 ...

  9. 解析 Qt 字库移植并能显示中文 (下篇)

    原文http://mobile.51cto.com/symbian-272563.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...

随机推荐

  1. hdu 4252 A Famous City

    题意:一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为0;求最少有多少个建筑; 分析: 输入的0 ...

  2. Notes of Linked Data concept and application - TODO

    Motivation [反正债多了不愁,再开个方向.] Data plays a core role in most business systems, data storage and retrie ...

  3. 转载:奇异值分解(SVD) --- 线性变换几何意义(上)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  4. Color Map的生成方法

    /* Return a RGB colour value given a scalar v in the range [vmin,vmax] In this case each colour comp ...

  5. 根据评分,用js输出评价星星的样式

    <b class="starsboxox" data="1"></b> $('.starsboxox').each(function() ...

  6. bootstrap-3

    段落: 1.全局文本字号为14px(font-size); 2.行高为1.42857143(line-height),大约是20px(一串数字是由less编译器计算出来的,当然sass也有这样的功能) ...

  7. Vue.js相关知识1

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. HDU-1828 Picture(扫描线)

    题目大意:给若干个矩形,求轮廓边长. 题目分析:与求面积类似.按从下往上扫描,仍然是底边添加,上边删除.但要同时维护竖边的数目,每次扫描对答案的贡献为扫描线上总覆盖长度的变化量加上竖边的增量.总覆盖长 ...

  9. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  10. Python爬虫学习笔记——豆瓣登陆(二)

    昨天能够登陆成功,但是不能使用cookies,今天试了一下requests库的Session(),发现可以保持会话了,代码只是稍作改动. #-*- coding:utf-8 -*- import re ...