zoukankan      html  css  js  c++  java
  • 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其实有CreateFileACreateFileW两个版本,这个设置的主要是让编译器自动选择不同的函数,跟把我们字符串编译进内存里面没什么关系

     

     

    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的数值

  • 相关阅读:
    LINUX 逻辑地址、线性地址、物理地址和虚拟地址 转
    Linux开机执行顺序
    Linux内核分析笔记 与Linux内核开发理论
    理解Linux系统中的load average(图文版)转
    Linux文件空洞与稀疏文件 转
    Linux中断(interrupt)子系统之一:中断系统基本原理 (图解)
    LINUX 内存结构
    LINUX 数据结构 &算法 网络协议 & 网络编程 多任务编程
    IO端口和IO内存的区别 转
    Linux内核高端内存 转
  • 原文地址:https://www.cnblogs.com/linyilong3/p/4868697.html
Copyright © 2011-2022 走看看