PySide6.QtCore.QStringConverter¶
- class QStringConverter¶
QStringConverter
类提供了一个用于编码和解码文本的基类。更多…继承者:
QStringEncoder
,QStringDecoder
概要¶
方法¶
def
__init__()
def
hasError()
def
isValid()
def
name()
def
resetState()
静态函数¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
Qt 使用 UTF-16 来存储、绘制和操作字符串。在许多情况下,您可能希望处理使用不同编码的数据。大多数通过文件和网络连接传输的文本数据都是以 UTF-8 编码的。
QStringConverter
类是QStringEncoder
和QStringDecoder
类的基类,这些类帮助在不同文本编码之间进行转换。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()
函数。在尝试分块转换数据时必须小心,例如,通过网络接收数据时。在这种情况下,多字节字符可能会被分割到两个块中。最好的情况是可能会导致一个字符的丢失,最坏的情况是可能导致整个转换失败。
通过内部状态跟踪,
QStringEncoder
和QStringDecoder
都使这变得容易。因此,只需再次使用下一块数据调用编码器或解码器,就会自动继续正确编码或解码数据: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
f –
Flag
的组合
- static availableCodecs()¶
- Return type:
字符串列表
返回支持的编解码器名称列表。此函数返回的名称可以传递给
QStringEncoder
和QStringDecoder
的构造函数,以创建给定编解码器的编码器或解码器。此函数可用于获取标准编解码器之外的额外编解码器列表。支持额外的编解码器需要Qt在编译时支持ICU库。
注意
编解码器的顺序是内部实现细节,不保证稳定。
- hasError()¶
- Return type:
布尔
如果转换无法正确转换字符,则返回true。例如,这可能是由于无效的UTF-8序列或由于目标编码的限制而无法转换字符时触发的。
- isValid()¶
- Return type:
布尔
如果这是一个可以用于编码或解码文本的有效字符串转换器,则返回true。
默认构造的字符串转换器或使用不受支持名称构造的转换器无效。
- name()¶
- Return type:
字符串
返回此
QStringConverter
可以编码或解码的编码的规范名称。如果转换器无效,则返回nullptr。返回的名称是UTF-8编码的。另请参阅
返回编码
e
的规范名称。- resetState()¶
重置转换器的内部状态,清除可能的错误或部分转换。