您的位置:首页 > 编程语言 > Qt开发

QTextCodec Class 参考手册

2009-09-16 19:13 239 查看


主页 · 所有的命名空间 · 所有的类 · 主要的类 · 分组的类 · 模块 · 函数汉化人员及日志

QTextCodec Class 参考手册
[QtCore module]

QTextCodec类提供了文字编码转换. More...

#include <QTextCodec>

Note: 此类所有函数可 重载, 除了 setCodecForTr(), setCodecForCStrings(), QTextCodec(), 和 ~QTextCodec().

List of all members, including inherited members

Qt 3 support members

Public Types

class ConverterState

enum ConversionFlag { DefaultConversion, ConvertInvalidToNull, IgnoreHeader }

flags ConversionFlags

Public Functions

virtual QList<QByteArray> aliases () const

bool canEncode ( QChar ch ) const

bool canEncode ( const QString & s ) const

QByteArray fromUnicode ( const QString & str ) const

QByteArray fromUnicode ( const QChar * input, int number, ConverterState * state = 0 ) const

QTextDecoder * makeDecoder () const

QTextEncoder * makeEncoder () const

virtual int mibEnum () const = 0

virtual QByteArray name () const = 0

QString toUnicode ( const QByteArray & a ) const

QString toUnicode ( const char * input, int size, ConverterState * state = 0 ) const

QString toUnicode ( const char * chars ) const

Static Public Members

QList<QByteArray> availableCodecs ()

QList<int> availableMibs ()

QTextCodec * codecForCStrings ()

QTextCodec * codecForHtml ( const QByteArray & ba, QTextCodec * defaultCodec )

QTextCodec * codecForHtml ( const QByteArray & ba )

QTextCodec * codecForLocale ()

QTextCodec * codecForMib ( int mib )

QTextCodec * codecForName ( const QByteArray & name )

QTextCodec * codecForName ( const char * name )

QTextCodec * codecForTr ()

void setCodecForCStrings ( QTextCodec * codec )

void setCodecForLocale ( QTextCodec * c )

void setCodecForTr ( QTextCodec * c )

Protected Functions

QTextCodec ()

virtual ~QTextCodec ()

virtual QByteArray convertFromUnicode ( const QChar * input, int number, ConverterState * state ) const = 0

virtual QString convertToUnicode ( const char * chars, int len, ConverterState * state ) const = 0

详细说明

QTextCodec类提供文字之间的编码转换.

Qt 使用 Unicode 存储, 操作字符串. 在许多情况下,你可能希望使用不懂得编码来处理数据. 例如, 大多数Japanese文档仍用Shift-JIS or ISO 2022-JP存储, 然而Russian用户常用KOI8-R or Windows-1251.

Qt 提供了一套QTextCodec类去帮助转换非-Unicode格式到Unicode.你也可以创建你自己的编码类.

支持的编码有:

Apple Roman

Big5

Big5-HKSCS

CP949

EUC-JP

EUC-KR

GB18030-0

IBM 850

IBM 866

IBM 874

ISO 2022-JP

ISO 8859-1 to 10

ISO 8859-13 to 16

Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml

JIS X 0201

JIS X 0208

KOI8-R

KOI8-U

MuleLao-1

ROMAN8

Shift-JIS

TIS-620

TSCII

UTF-8

UTF-16

UTF-16BE

UTF-16LE

UTF-32

UTF-32BE

UTF-32LE

Windows-1250 to 1258

WINSAMI2

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子类,并实现下表的函数.

FunctionDescription
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.

Member Type Documentation

enum QTextCodec::ConversionFlag
flags QTextCodec::ConversionFlags

ConstantValueDescription
QTextCodec::DefaultConversion0No flag is set.
QTextCodec::ConvertInvalidToNull0x80000000如果此标志被设置,每个无效的输入将被转换为null字符输出.
QTextCodec::IgnoreHeader0x1忽略所有的Unicode字节序.
The ConversionFlags type is a typedef for QFlags<ConversionFlag>. It stores an OR combination of ConversionFlag values.

Member Function Documentation

QTextCodec::QTextCodec () [protected]

构造一个QTextCodec, 并且赋予最高的优先级. QTextCodec 应在堆上构造 (i.e. 使用 new关键字). Qt 获取所有权并在应用程序结束时删除.

Warning: 此函数不可 重载 .

QTextCodec::~QTextCodec () [virtual protected]

析构QTextCodec. 注意你不应该自己删除codecs:一旦创建便由Qt负责.

Warning: 此函数不可 重载 .

QList<QByteArray> QTextCodec::aliases () const [virtual]

子类返回别名序列

编码标准别名可以查看 IANA character-sets encoding file.

QList<QByteArray> QTextCodec::availableCodecs () [static]

返回所有可用的编码, 调用 QTextCodec::codecForName()通过name获得QTextCodec的name.

如果编码有别名,立标将包含许多提及的相同编码.

See also availableMibs(), name(), and aliases().

QList<int> QTextCodec::availableMibs () [static]

为多有可用的编码返回MIBs列表. Call QTextCodec::codecForMib() to obtain the QTextCodec for the MIB.

See also availableCodecs() and mibEnum().

翻译了部分Qt4.5的参考手册,详细地址:http://l.99081.com/jieen/Qt451/index.html

刚开始,慢慢来!坚持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: