主页 · 所有的命名空间 · 所有的类 · 主要的类 · 分组的类 · 模块 · 函数 | 汉化人员及日志 |
QTextCodec类提供了文字编码转换. More...
#include <QTextCodec>
Note: 此类所有函数可 重载, 除了 setCodecForTr(), setCodecForCStrings(), QTextCodec(), 和 ~QTextCodec().
QTextCodec类提供文字之间的编码转换.
Qt 使用 Unicode 存储, 操作字符串. 在许多情况下,你可能希望使用不懂得编码来处理数据. 例如, 大多数Japanese文档仍用Shift-JIS or ISO 2022-JP存储, 然而Russian用户常用KOI8-R or Windows-1251.
Qt 提供了一套QTextCodec类去帮助转换非-Unicode格式到Unicode.你也可以创建你自己的编码类.
支持的编码有:
QTextCodecs常被用来将本地的编码转换为Unicode.假设你有些Russian KOI8-R编码的字串,希望转换为Unicode. 最简单的方法如下:
QByteArray encodedString = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString);
执行完后, string 保存了转换为Unicode的文本. 将Unicode字串转换为本地编码同样简单:
QString string = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QByteArray encodedString = codec->fromUnicode(string);
陆续读或写各种编码, 使用 QTextStream 和它的 setCodec() 函数. 查看QTextCodec向文件I/O读写的范例Codecs.
当试图转换块数据时应当注意,例如,从网络获取的数据.这种情况,可能将多字节字符分成几块. 将会导致丢失字符甚至全部转换失败.
在类似这种情况下使用QTextDecoder 对象来编码和使用 QTextDecoder 来完成整个译码过程, 如下:
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); QTextDecoder *decoder = codec->makeDecoder(); QString string; while (new_data_available()) { QByteArray chunk = get_new_data(); string += decoder->toUnicode(chunk); }
The QTextDecoder对象保存了块与块之间的状态所以即使多个字节的字符被分成多块也能正常工作.
创建QTextCodec子类可以为Qt添加新的文字编码支持.
The pure virtual functions describe the encoder to the system and the coder is used as required in the different text file formats supported by QTextStream, and under X11, for the locale-specific character input and output.
向Qt添加新的编码支持,需要创建QTextCodec子类,并实现下表的函数.
Function | Description |
---|---|
name() | 返回正式编码的名称. 如果编码在 IANA character-sets encoding file中, the name 将为编码首选MIME name. |
aliases() | 返回编码的别名. QTextCodec提供了默认实现返回一个空列表. 如, "ISO-8859-1" has "latin1", "CP819", "IBM819", and "iso-ir-100" as aliases. |
mibEnum() | 如果编码在 IANA character-sets encoding file中,则返回MIB枚举类型. |
convertToUnicode() | 将8位字符串转换为Unicode. |
convertFromUnicode() | 将Unicode转换为8位字符串. |
你将发现为你的编码创建一个插件更方便; 查看 How to Create Qt Plugins 获取详细信息.
See also QTextStream, QTextDecoder, QTextEncoder, and Codecs Example.
Constant | Value | Description |
---|---|---|
QTextCodec::DefaultConversion | 0 | No flag is set. |
QTextCodec::ConvertInvalidToNull | 0x80000000 | 如果此标志被设置,每个无效的输入将被转换为null字符输出. |
QTextCodec::IgnoreHeader | 0x1 | 忽略所有的Unicode字节序. |
The ConversionFlags type is a typedef for QFlags<ConversionFlag>. It stores an OR combination of ConversionFlag values.
构造一个QTextCodec, 并且赋予最高的优先级. QTextCodec 应在堆上构造 (i.e. 使用 new关键字). Qt 获取所有权并在应用程序结束时删除.
Warning: 此函数不可 重载 .
析构QTextCodec. 注意你不应该自己删除codecs:一旦创建便由Qt负责.
Warning: 此函数不可 重载 .
子类返回别名序列
编码标准别名可以查看 IANA character-sets encoding file.
返回所有可用的编码, 调用 QTextCodec::codecForName()通过name获得QTextCodec的name.
如果编码有别名,立标将包含许多提及的相同编码.
See also availableMibs(), name(), and aliases().
为多有可用的编码返回MIBs列表. Call QTextCodec::codecForMib() to obtain the QTextCodec for the MIB.
See also availableCodecs() and mibEnum().
刚开始,慢慢来!坚持