QT显示中文的几个问题
最近用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显示中文的几个问题的更多相关文章
- 【ARM-Linux开发】ARM板卡上QT显示中文
平台:Freescale imx6 编译系统:yocto Qt版本:5.5.1 刚弄了个Qt程序到开发板,发现中文都没有显示,英文可以显示. 就加了个中文字库.DroidSansFallback ...
- QT显示中文 连接上文
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- Qt之中文显示(QMessageBox、QLineEdit右键菜单等)
来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101art3.html 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候 ...
- 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...
- 如何让移植的嵌入式ARM显示中文汉字
如果你急于在ARM开发板上看到Qt显示中文,而不介意稍次的效果,可以在运行Qt程序时,增加设置字体的参数,比如运行名为hello的Qt程序:./hello -fn unifont 1.首先,需要文泉驿 ...
- 嵌入式qt显示中文和隐藏鼠标
最近项目快接近尾声了,要把项目移植到板子上,但是板子上的系统没有安装字库,导致中文无法显示,并且有一个很讨厌的鼠标光标(又没有鼠标),上网找了一些解决方案,记录一下 qt显示中文: 如果你急于在ARM ...
- Qt支持中文显示
Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...
- Qt使用MSVC编译器不能正确显示中文的解决方案
用VisualStudio做为IDE,使用Qt框架,显示中文,会出现乱码的情况. 原因:MSVC编译器虽然可以正常编译带BOM的UTF-8编译的源文件,但是生成的可执行文件的编码是Windows本地字 ...
- 解析 Qt 字库移植并能显示中文 (下篇)
原文http://mobile.51cto.com/symbian-272563.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...
随机推荐
- python 数据结构之双向链表的实现
和单链表类似,只不过是增加了一个指向前面一个元素的指针而已. 示意图: python 实现代码: #!/usr/bin/python # -*- coding: utf-8 -*- class Nod ...
- 快速对字符转义,避免跨站攻击XSS
XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入.可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客.博客园开放性很高,可以运行手写的JS.之前比较著名的例子就是,凡是看到某 ...
- matlab演奏最炫民族风的代码注释
用Matlab来放音乐,和用单片机加蜂鸣器放音乐的原理都差不多,就是把连续的声音信号事先转换成用数字信号,然后用扬声器按照一定的节奏放出来.换句话说,演唱者是把声音经过麦克风转换成电信号,录音设备对这 ...
- 将Excel生成实体类
package com.excel.test; import java.util.List; public class createUtil { public static String append ...
- hdu1059 Dividing ——多重背包
link:http://acm.hdu.edu.cn/showproblem.php?pid=1059 最简单的那种 #include <iostream> #include <cs ...
- Codeforces Round #112 (Div. 2)
Codeforces Round #112 (Div. 2) C. Another Problem on Strings 题意 给一个01字符串,求包含\(k\)个1的子串个数. 思路 统计字符1的位 ...
- Python学习(4)——for语句
Python中range()函数的用法 >>> range(5) [0, 1, 2, 3, 4] >>> range(0,5) [0, 1, 2, 3, 4] &g ...
- poj1511 最短路
题意:与poj3268一样,所有人需要从各点到一点再从一点到各点,求最短路总和. 与poj3268一样,先正向建图跑 dijkstra ,得到该点到其他所有各点的最短路,即这些人回去的最短路,再用反向 ...
- ARM1138@PWM例程分析
1. Buzzer例程控制原理 由ARM1138原理图可得:Buzzer使用CCP3(对应GPIO-G组0x40026000,4号引脚0x00000010)作为输入引脚: Buzzer例程结构: 涉及 ...
- 《剑指Offer》之替换空格
1.题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.代码实 ...