QTextCodec

一、描述

Qt 使用 Unicode 来存储、绘制、操作字符串。 在许多情况下,可能希望处理使用不同编码的数据。

Qt 提供了 QTextCodec 类来帮助在非 Unicode 格式和 Unicode 之间进行转换。

QTextCodecs 可以用于将一些本地编码的字符串转换为 Unicode:

 QByteArray encodedString = "...";
 QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
 QString string = codec->toUnicode(encodedString);

将字符串从 Unicode 转换为本地编码:

 QString string = "...";
 QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
 QByteArray encodedString = codec->fromUnicode(string);

尝试以块的形式转换数据时必须小心,例如,当通过网络接收数据时,多字节字符可能会被分成两个块。这可能会导致字符丢失,最坏的情况是导致整个转换失败。在这些情况下使用的方法是为编解码器创建一个 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);
 }
 delete decoder;

QTextDecoder 对象维护块之间的状态,因此即使多字节字符在块之间拆分也能正常工作。

二、类型成员

1、enum QTextCodec::ConversionFlag:转换标志。

  • DefaultConversion:未设置标志。
  • ConvertInvalidToNull:每个无效输入字符将作为空字符输出。
  • IgnoreHeader:忽略任何 Unicode 字节顺序标记并且不生成任何标记。

三、成员函数

1、[static] QList<QByteArray> availableCodecs()

按名称返回所有可用编解码器的列表。

    qDebug()<<QTextCodec::availableCodecs();

2、bool canEncode(QChar ch)

     bool canEncode(const QString &s)

此编解码器是否完全编码 Unicode 字符 ch / 字符串s。

3、[static] QTextCodec * codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)

返回一个能够将 html 数据解码为 unicode 的 QTextCodec 实例。如果无法从提供的内容中检测到编解码器,则返回 defaultCodec。 

4、[static] QTextCodec * codecForHtml(const QByteArray &ba)

重载函数。如果无法检测到编解码器,则返回一个 Latin-1 QTextCodec。

5、[static] QTextCodec * codecForLocale()

返回指向最适合当前语言环境的编解码器的指针。 

6、[static] QTextCodec * codecForName(const QByteArray &name)

     [static] QTextCodec * codecForName(const char *name)

 搜索所有已安装的 QTextCodec 对象并返回最匹配名称的对象,匹配不区分大小写。

7、[static] QTextCodec * codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)

尝试使用 BOM(字节顺序标记)检测提供的代码段 ba 的编码,并返回一个能够将文本解码为 unicode 的 QTextCodec 实例。如果无法从提供的内容中检测到编解码器,则返回 defaultCodec。

8、[static] QTextCodec * codecForUtfText(const QByteArray &ba)

重载函数。如果无法检测到编解码器,则返回一个 Latin-1 QTextCodec。

9、QByteArray fromUnicode(const QString &str)

将字符串从 Unicode 转换为当前编解码器的编码,并以字节数组形式返回结果。

10、QByteArray fromUnicode(const QChar *input, int n, QTextCodec::ConverterState *state = nullptr)

将input数组中n个字符从 Unicode 转换为此编解码器的编码,并在 QByteArray 中返回结果。

11、[static] void setCodecForLocale(QTextCodec *c)

设置程序的编解码器。这将由 codecForLocale() 返回。 如果 c 为 nullptr,则编解码器将重置为默认值。

12、QString toUnicode(const QByteArray &a)

        QString toUnicode(const char *chars)

        QString toUnicode(const char *input, int n, QTextCodec::ConverterState *state = nullptr)

转换为 Unicode,并在 QString 中返回结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值