PySide6.QtCore.QStringConverter

class QStringConverter

QStringConverter 类提供了一个用于编码和解码文本的基类。更多

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 可能支持更多的编码,这取决于 Qt 是如何编译的。如果支持更多的编解码器,可以使用 availableCodecs() 列出它们。

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()函数。

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

通过内部状态跟踪,QStringEncoderQStringDecoder 都使这变得容易。因此,只需再次使用下一块数据调用编码器或解码器,就会自动继续正确编码或解码数据:

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

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

QStringConverter 对象由于其内部状态无法被复制,但可以被移动。

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__(name, f)
Parameters:
  • name – str

  • fFlag 的组合

__init__(encoding, f)
Parameters:
static availableCodecs()
Return type:

字符串列表

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

此函数可用于获取标准编解码器之外的额外编解码器列表。支持额外的编解码器需要Qt在编译时支持ICU库。

注意

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

hasError()
Return type:

布尔

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

isValid()
Return type:

布尔

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

默认构造的字符串转换器或使用不受支持名称构造的转换器无效。

name()
Return type:

字符串

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

另请参阅

isValid()

static nameForEncoding(e)
Parameters:

e编码

Return type:

字符串

返回编码 e 的规范名称。

resetState()

重置转换器的内部状态,清除可能的错误或部分转换。