本页内容

Qt 中的 Unicode

Unicode是全球几乎所有语言文本编码的标准。如今,大多数现代操作系统都将它作为文本的原生编码。主要的例外是 Microsoft Windows,该系统仍采用双重机制,同时支持代码页和 Unicode 作为应用程序的编码。

Qt 中用于处理字符串的类

在处理字符串数据时,这些类非常重要。有关文本渲染的信息,请参阅“富文本处理”概述;如果您的字符串数据以 XML 格式存储,请参阅“XML 处理”概述。

QAnyStringView

通过 QString API 的只读子集,统一处理 Latin-1、UTF-8 或 UTF-16 字符串

QByteArray

字节数组

QByteArrayList

字节数组列表

QByteArrayMatcher

存储一串字节,可在字节数组中快速匹配

QByteArrayView

通过 QByteArray API 的只读子集对字节数组进行操作

QChar

16 位 Unicode 字符

QCollator

根据本地化的排序规则对字符串进行比较

QCollatorSortKey

可用于加快字符串排序速度

QLatin1Char

8 位 ASCII/Latin-1 字符

QLatin1StringMatcher

针对 Latin-1 文本中的子字符串进行了优化搜索

QLatin1StringView

US-ASCII/Latin-1编码字符串字面量的轻量级封装

QLocale

在各种语言中进行数字与其字符串表示形式之间的转换

QRegularExpression

使用正则表达式进行模式匹配

QRegularExpressionMatch

将 QRegularExpression 与字符串进行匹配的结果

QRegularExpressionMatchIterator

QRegularExpression 对象对字符串进行全局匹配后的结果迭代器

QStaticByteArrayMatcher

QByteArrayMatcher 的编译时版本

QStaticLatin1StringMatcher

QLatin1StringMatcher 的编译时版本

QString

Unicode 字符串

QStringConverter

文本编码和解码的基类

QStringDecoder

基于状态的文本解码器

QStringEncoder

基于状态的文本编码器

QStringList

字符串列表

QStringMatcher

包含一串字符,可在 Unicode 字符串中快速进行匹配

QStringRef

QString 子字符串的轻量级封装类

QStringTokenizer

根据给定的分隔符将字符串拆分为令牌

QStringView

提供对 UTF-16 字符串的统一视图,并包含 QString API 的只读子集

QTextBoundaryFinder

在字符串中查找 Unicode 文本边界的方法

QTextStream

用于读写文本的便捷接口

QUtf8StringView

通过 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(QString::fromLatin1("appicon.png"));

或者

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.