在 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(由QUtf16Codecand使用QUtf32Codec),您可以找到以下行:
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian)
? BigEndianness : LittleEndianness;