最近用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. Codeforces Round #373 (Div. 2) A B C 水 贪心 模拟(四舍五入进位)

    A. Vitya in the Countryside time limit per test 1 second memory limit per test 256 megabytes input s ...

  2. Mysql 下 Insert、Update、Delete、Order By、Group By注入

    Insert: 语法:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 报错注入: insert into test(id,name,p ...

  3. Qt 串口编程学习1

    1.测试设备:USB 转串口 将RX和TX短接 2.开发环境:windows 1安装Qt for windows 2测试,新建项目编译 出现问题 Cannot find file: C:\Docume ...

  4. JavaWeb学习记录(十五)——浏览器Cookie禁用后的处理

    IE禁用Cookie方式:

  5. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  6. HDU 1159 Common Subsequence

    HDU 1159 题目大意:给定两个字符串,求他们的最长公共子序列的长度 解题思路:设字符串 a = "a0,a1,a2,a3...am-1"(长度为m), b = "b ...

  7. android的消息处理有三个核心类:Looper,Handler和Message。

    android的消息处理机制(图+源码分析)——Looper,Handler,Message   作为 一名android程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设 ...

  8. sql中的字符串匹配、函数大全

    假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些 ...

  9. java的nio之:java的nio系列教程之DatagramChannel

    Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...

  10. 论文笔记之:Deep Reinforcement Learning with Double Q-learning

    Deep Reinforcement Learning with Double Q-learning Google DeepMind Abstract 主流的 Q-learning 算法过高的估计在特 ...