Unicode in Qt
Unicode几乎是世界上所有语言的文本进行编码的标准。现在,在大多数现代操作系统上,它被用作文本的本机编码。主要的例外是Microsoft Windows,它仍然有用于应用程序的双系统支持的代码页和Unicode。
Qt使用字符串的类
这些类在处理字符串数据时是相关的。 有关渲染文本的信息,请参见“ Rich Text Processing”(RTF处理)概述,如果您的字符串数据为XML,请参见“ XML Processing”(XML处理)概述。
类名 | 简介 |
---|---|
QByteArray | 字节数组 |
QByteArrayList | 字节数组列表 |
QByteArrayMatcher | 包含可以在字节数组中快速匹配的字节序列 |
QChar | 16位Unicode字符 |
QCollator | 根据本地排序规则算法比较字符串 |
QCollatorSortKey | 可用于加速字符串整理 |
QLatin1Char | 8位ASCII /拉丁1字符 |
QLatin1String | 围绕US-ASCII / Latin-1编码的字符串文字的薄包装器 |
QLocale | 在数字及其各种语言的字符串表示形式之间转换 |
QStaticByteArrayMatcher | QByteArrayMatcher的编译时版本 |
QString | Unicode字符串 |
QStringList | 字符串清单,继承QList |
QStringMatcher | 包含可以在Unicode字符串中快速匹配的字符序列 |
QStringRef | QString子字符串的薄包装 |
QStringView | UTF-16字符串的统一视图以及QString API的只读子集 |
QTextBoundaryFinder | 在字符串中查找Unicode文本边界的方法 |
QTextStream | 方便的阅读和书写文字界面 |
Web上有关Unicode的信息
Unicode协会有许多可用的文档,包括
Unicode in Qt
在Qt和大多数使用Qt的应用程序中,大多数或所有用户可见的字符串都使用Unicode存储。Qt提供:
-
文件I/O与旧地遗留编码之间的转换:见QTextCodec和QTextStream。
-
支持地区特定的输入方法和键盘。
-
一个字符串类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支持呈现世界上大多数语言编写的文本。受支持的写入系统的详细列表在一定程度上取决于操作系统支持和目标系统上的字体可用性。