在 Qt 文档中,它声明(除其他外)支持以下 Unicode 字符串编码:
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
由于为 2 和 4 字节编码的 Unicode 列出了三种不同的编解码器,我想知道:这两种非字节序编解码器(“UTF-16”和“UTF-32”)如何决定使用哪种字节序?
在 Qt 文档中,它声明(除其他外)支持以下 Unicode 字符串编码:
由于为 2 和 4 字节编码的 Unicode 列出了三种不同的编解码器,我想知道:这两种非字节序编解码器(“UTF-16”和“UTF-32”)如何决定使用哪种字节序?
根据 中的源代码src/corelibs/codecs/
,Qt 似乎将主机的字节顺序用于 UTF-16 和 UTF-32。
如果您用于QTextCodec
读取具有 BOM 的现有 Unicode 字符串,并且您没有明确要求忽略标头,则使用在字符串中检测到的字节顺序。
在 *qutfcodec_p.h* 中,两者QUtf16Codec::e
和QUtf32Codec::e
都使用值DetectEndianness
(枚举)进行初始化。
在qutfcodec.cpp中,靠近函数的开头convertFromUnicode
以及convertToUnicode
类QUtf16
和QUtf32
(由QUtf16Codec
and使用QUtf32Codec
),您可以找到以下行:
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian)
? BigEndianness : LittleEndianness;