Qt 中的 Unicode
Unicode是全球几乎所有语言文本编码的标准。如今,大多数现代操作系统都将它作为文本的原生编码。主要的例外是 Microsoft Windows,该系统仍采用双重机制,同时支持代码页和 Unicode 作为应用程序的编码。
Qt 中用于处理字符串的类
在处理字符串数据时,这些类非常重要。有关文本渲染的信息,请参阅“富文本处理”概述;如果您的字符串数据以 XML 格式存储,请参阅“XML 处理”概述。
通过 QString API 的只读子集,统一处理 Latin-1、UTF-8 或 UTF-16 字符串 | |
字节数组 | |
字节数组列表 | |
存储一串字节,可在字节数组中快速匹配 | |
通过 QByteArray API 的只读子集对字节数组进行操作 | |
16 位 Unicode 字符 | |
根据本地化的排序规则对字符串进行比较 | |
可用于加快字符串排序速度 | |
8 位 ASCII/Latin-1 字符 | |
针对 Latin-1 文本中的子字符串进行了优化搜索 | |
US-ASCII/Latin-1编码字符串字面量的轻量级封装 | |
在各种语言中进行数字与其字符串表示形式之间的转换 | |
使用正则表达式进行模式匹配 | |
将 QRegularExpression 与字符串进行匹配的结果 | |
QRegularExpression 对象对字符串进行全局匹配后的结果迭代器 | |
QByteArrayMatcher 的编译时版本 | |
QLatin1StringMatcher 的编译时版本 | |
Unicode 字符串 | |
文本编码和解码的基类 | |
基于状态的文本解码器 | |
基于状态的文本编码器 | |
字符串列表 | |
包含一串字符,可在 Unicode 字符串中快速进行匹配 | |
QString 子字符串的轻量级封装类 | |
根据给定的分隔符将字符串拆分为令牌 | |
提供对 UTF-16 字符串的统一视图,并包含 QString API 的只读子集 | |
在字符串中查找 Unicode 文本边界的方法 | |
用于读写文本的便捷接口 | |
通过 QString API 的只读子集,提供对 UTF-8 字符串的统一视图 |
关于 Web 上 Unicode 的信息
Unicode 联盟提供了许多文档,包括
Qt 中的 Unicode
在 Qt 以及大多数使用 Qt 的应用程序中,大部分或所有用户可见的字符串均采用 Unicode 格式存储。Qt 提供:
- 文件 I/O 中的传统编码转换:请参阅QTextCodec 和QTextStream 。
- 对特定区域设置的输入法和键盘的支持。
- 一个用于存储 Unicode 字符的字符串类 `QString`,支持从 C 字符串迁移,包括与 UTF-8、ISO8859-1 和 US-ASCII 之间的快速转换,以及所有常规的字符串操作。
- 支持 Unicode 的 UI 控件。
- 符合 Unicode 标准的文本分段(QTextBoundaryFinder )
- 符合 Unicode 标准的换行和文本渲染
为了充分利用 Unicode,我们建议使用QString 来存储所有用户可见的字符串,并使用QTextStream 进行所有文本文件的 I/O 操作。
Qt 中所有可能作为用户可见字符串的函数参数(如QLabel::setText() 以及许多其他函数)均接受const QString &类型。QString 提供了从const char * 的隐式转换,因此诸如
label->setText("Password:");这样的代码能够正常运行。此外,还有QObject::tr() 函数提供翻译支持,如下所示:
label->setText(tr("Password:"));QObject::tr() 将const char * 映射到 Unicode 字符串,并使用可安装的QTranslator 对象进行映射。
Qt 提供了一系列内置的QTextCodec 类,即懂得在 Unicode 与旧式编码之间进行转换的类,以支持必须与其他程序通信或读写旧式文件格式的程序。
与const char * 之间的转换使用UTF-8。不过,应用程序可以轻松找到其他区域设置的编解码器,并设置任何已打开的文件或网络连接以使用特定的编解码器。
由于 US-ASCII 和 ISO-8859-1 非常常见,因此还提供了专门用于与它们进行映射的特别快速的函数。例如,要打开应用程序的图标,可以这样做:
或者
QFile file(QLatin1String("appicon.png"));Qt 支持渲染世界上大多数语言的文本。支持的书写系统详细列表在一定程度上取决于操作系统的支持情况以及目标系统上字体的可用性。
另请参阅 《Qt 国际化》。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.