Unicode in Qt

Unicode 是世界上几乎所有语言的文本编码标准. 如今, 它被用作大多数现代操作系统上文本的本机编码. 主要的例外是 Microsoft Windows,它仍然具有支持应用程序代码页和 Unicode 的双系统.

Qt's Classes for Working with Strings

下列类处理有关字符串数据. 有关呈现文本的信息, 参见 Rich Text Processing, 如果处理 XML 中的字符串, 参见 XML Processing.

QTextStream

Convenient interface for reading and writing text

QByteArray

Array of bytes

QByteArrayList

List of byte arrays

QByteArrayMatcher

Holds a sequence of bytes that can be quickly matched in a byte array

QStaticByteArrayMatcher

Compile-time version of QByteArrayMatcher

QChar

16-bit Unicode character

QLatin1Char

8-bit ASCII/Latin-1 character

QCollator

Compares strings according to a localized collation algorithm

QCollatorSortKey

Can be used to speed up string collation

QLocale

Converts between numbers and their string representations in various languages

QLatin1String

Thin wrapper around an US-ASCII/Latin-1 encoded string literal

QString

Unicode character string

QStringRef

Thin wrapper around QString substrings

QStringList

List of strings

QStringMatcher

Holds a sequence of characters that can be quickly matched in a Unicode string

QTextBoundaryFinder

Way of finding Unicode text boundaries in a string

Web 上的 Unicode 信息

Unicode Consortium 有许多相关文档, 包括:

Qt 中的 Unicode

在 Qt 以及大多数使用 Qt 的应用程序中, 大多数或所有用户可见的字符串都使用 Unicode 存储. Qt 提供:

  • 文件 I/O 与传统编码之间的转换: 参见 QTextCodecQTextStream.
  • 支持特定于区域设置的输入法和键盘.
  • QString, 存储 Unicode 字符, 支持从 C 字符串迁移, 包括与 UTF-8, ISO8859-1 和 US-ASCII 之间的快速转换, 以及所有常见的字符串操作.
  • 识别 Unicode 的 UI 控件.
  • 符合 Unicode 的文本分段 (QTextBoundaryFinder).
  • 符合 Unicode 的换行和文本渲染.

为了充分受益于 Unicode, 我们建议使用 QString 存储所有用户可见的字符串, 并使用 QTextStream 执行所有文本文件 I/O.

Qt 中所有可能是用户可见字符串的函数参数, QLabel::setText() 和许多其他参数都采用 const QString &s. 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 支持渲染世界上大多数语言的文本. 支持的书写系统的详细列表在一定程度上取决于目标系统上的操作系统支持和字体可用性.

参见 Internationalization with Qt.