class QStringConverter#

QStringConverter》类为文本编码和解码提供了一个基类。更多

Inheritance diagram of PySide6.QtCore.QStringConverter

继承自: QStringEncoder, QStringDecoder

摘要#

方法#

静态函数#

注意

本文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译中存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单来告知我们。

详细描述#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

Qt使用UTF-16来存储、绘制和操作字符串。在许多情况下,您可能需要处理不同的编码的数据。大多数通过文件和网络连接传输的文本数据都是UTF-8编码。

QStringConverter 类是 QStringEncoderQStringDecoder 类的基类,后者有助于在不同的文本编码之间转换。 QStringDecoder 能够将从编码表示转换为UTF-16格式的字符串,这是Qt内部使用的一种格式。 QStringEncoder 执行相反的操作,将UTF-16编码的数据(通常以 QString 形式)编码成请求的编码。

支持的编码有

  • UTF-8

  • UTF-16

  • UTF-16BE

  • UTF-16LE

  • UTF-32

  • UTF-32BE

  • UTF-32LE

  • ISO-8859-1 (拉丁-1)

  • 系统编码

QStringConverter 可以如下使用,将编码的字符串转换为UTF-16或从UTF-16转换回来。

假设您有一些UTF-8编码的字符串,并想将其转换为 QString 。最简单的方法是使用一个 QStringDecoder 类,如下所示:

encodedString = "..."
toUtf16 = QStringDecoder(QStringDecoder.Utf8)
string = toUtf16(encodedString)

之后, string 包含解码后的文本。使用 QStringEncoder 类将字符串从Unicode转换为本地编码同样简单。

string = "..."
fromUtf16 = QStringEncoder(QStringEncoder.Utf8)
encodedString = fromUtf16(string)

要读取或写入各种编码的文本文件,请使用 QTextStream 及其 setEncoding() 函数。

在尝试分块转换数据时,例如在通过网络接收时,必须格外小心。在这种情况下,可能有多字节字符被拆分到两个块中。最好的情况是丢失一个字符,最坏的情况是整个转换失败。

无论是QStringEncoder还是QStringDecoder,都可以通过跟踪内部状态来简化这个问题。所以,只需要使用下一块数据再次调用编码器或解码器,就可以自动正确地继续编码或解码数据。

toUtf16 = QStringDecoder(QStringDecoder.Utf8)
string = QString()
while new_data_available():
    chunk = get_new_data()
    string += toUtf16(chunk)

QStringDecoder对象在块之间保持状态,因此即使在多字节字符被分割在块之间时也能正常工作。

由于内部状态,QStringConverter对象不能被复制,但可以移动。

另请参阅

QTextStream QStringDecoder QStringEncoder

class Encoding#

常量

描述

QStringConverter.Utf8

创建一个UTF-8的转换器

QStringConverter.Utf16

创建一个从或到UTF-16的转换器。在解码时,字节顺序将自动由前面的字节顺序标记检测。如果没有或是在编码时,将假定系统字节顺序。

QStringConverter.Utf16BE

创建一个从或到大端UTF-16的转换器。

QStringConverter.Utf16LE

创建一个从或到小端UTF-16的转换器。

QStringConverter.Utf32

创建一个从或到UTF-32的转换器。在解码时,字节顺序将自动由前面的字节顺序标记检测。如果没有或是在编码时,将假定系统字节顺序。

QStringConverter.Utf32BE

创建一个从或到大端UTF-32的转换器。

QStringConverter.Utf32LE

创建一个从或到小端UTF-32的转换器。

QStringConverter.Latin1

创建一个从或到ISO-8859-1 (Latin1)的转换器。

QStringConverter.System

创建一个从操作系统环境编码到或从其转换的转换器。对于基于Unix的系统,这始终被假定为UTF-8。在Windows上,这转换到和从区域代码页。

PySide6.QtCore.QStringConverter.state#
__init__()#
__init__(encoding, f)
参数:
__init__(name, f)
参数:
  • name – 字符串

  • f – 结合 Flag

静态 availableCodecs()#
返回类型:

字符串列表

返回支持编解码器的名称列表。此函数返回的名称可以传递给 QStringEncoderQStringDecoder 的构造函数以创建给定编解码器的编解码器。

注意

编解码器的顺序是内部实现细节,不一定稳定。

hasError()#
返回类型:

布尔值

如果转换无法正确转换字符,则返回 true。这可能由无效的 UTF-8 序列或由于目标编码的限制而无法转换的字符触发。

isValid()#
返回类型:

布尔值

如果是有效的字符串编解码器,可以用于编码或解码文本,则返回 true。

默认构造的字符串编解码器或使用不受支持的名称构造的编解码器不是有效的。

name()#
返回类型:

字符串

返回此 QStringConverter 可以编码或解码的编码的标准名称。如果转换器无效,则返回 nullptr。返回的名称是 UTF-8 编码的。

另请参阅

isValid()

静态 nameForEncoding(e)#
参数:

eEncoding

返回类型:

字符串

返回编码 e 的标准名称。

resetState()#

重置转换器的内部状态,清除潜在的错误或不完整的转换。