查看完整版本: [-- 想问一下Qt 如何把16进制的unicode码转换为汉字显示 --]

QTCN开发网 -> Qt中文处理 -> 想问一下Qt 如何把16进制的unicode码转换为汉字显示 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

nokia-plus 2022-01-02 22:39

想问一下Qt 如何把16进制的unicode码转换为汉字显示

各位大神好

我用的4.7.4版本QT

如何把0x738b对应的汉字“测”在QLabel上显示出来
又如何把“测”转化为16进制数字

http://www.qtcn.org/bbs/read-htm-tid-55729-fpage-4.html
这个帖子推荐的用这个QString::fromLocal8Bit()

但是我这个工程一直提示函数没声明


newItem[column].setText(QString::fromLocal8Bit(strtemp));

518: 错误:no matching function for call to 'QString::fromLocal8Bit(QString&)'

20091001753 2022-01-02 23:48
用什么数字,多长的数字,来映射一个字符,实际上是文字编码决定的。

至于你说的 0x738b 映射 测 这个字,应该是不对的,因为常见的编码如下:
[attachment=22711]

网站:https://www.qqxiuzi.cn/bianma/zifuji.php

总之你要注意几个地方:
首先,你要确定,你到底是用什么文字编码。
其次,文字编码 涉及 “源码文字编码”、“运行时文字编码”;而前者 Qt5 开始强制源码使用 utf8 编码。
最后,QString::fromLocal8Bit 是存在问题的:不同系统对本地文字编码的定义是不同的。
例如 linux 系统是 utf8 ,而 windows 系统的本地编码,取决于你所安装的语言,中文系统就是 GBK 编码。

nokia-plus 2022-01-03 19:25
20091001753:用什么数字,多长的数字,来映射一个字符,实际上是文字编码决定的。
至于你说的 0x738b 映射 测 这个字,应该是不对的,因为常见的编码如下:
[图片]
....... (2022-01-02 23:48) 

感谢大神,不好意思啊,这个举例编码我搞错了,我这是gbk编码的,我就是想把编码的内码转换成文字在文本框里显示出来,转换的方法还没找到,想问一下如何将string中的B2E2 转换成“测”字显示出来

20091001753 2022-01-04 01:45
Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。

Qt4 因为长期没使用了,所以具体忘了。

Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
Qt4 与 Qt5 都使用 QTextCodec 来经行编码之间的转换。
所以 QTextCodec 就是你要找的答案。

而 Qt6 废弃了 QTextCodec,而是换用了其他类来处理,具体怎么弄,我也还没接触。
我目前坚守在 Qt5.15.2

liudianwu 2022-01-04 09:14
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

QTextCodec没有废弃,移到了core5compat模块,你需要 QT+=core5compat

liudianwu 2022-01-04 09:15
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

确切的说是 greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat

liudianwu 2022-01-04 09:16
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

虾米大佬光顾着给qt武林秘籍比如升级到qt6血泪经验篇点赞,而没有去看具体内容

yuyu414 2022-01-04 09:33
你们说了这么多都没搞清楚楼主要的是什么。
/**
* @brief fromUnicodeString
* "\uxxxx\uxxxx"转换为QString
* @param text
* @return  
*/
QString fromUnicodeString(const QString &text)
{
    QString result;
    QStringList list = text.split(R"(\u)", Qt::SkipEmptyParts);
    for (int i = 0; i < list.size(); ++i) {
        QString str = list.at(i);
        QChar c(str.toInt(nullptr, 16));
        result.append(c);
    }
    return result;
}


查看完整版本: [-- 想问一下Qt 如何把16进制的unicode码转换为汉字显示 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled