3

在 Qt 文档中,它声明(除其他外)支持以下 Unicode 字符串编码:

  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE

由于为 2 和 4 字节编码的 Unicode 列出了三种不同的编解码器,我想知道:这两种非字节序编解码器(“UTF-16”和“UTF-32”)如何决定使用哪种字节序?

4

1 回答 1

3

根据 中的源代码src/corelibs/codecs/,Qt 似乎将主机的字节顺序用于 UTF-16 和 UTF-32。

如果您用于QTextCodec读取具有 BOM 的现有 Unicode 字符串,并且您没有明确要求忽略标头,则使用在字符串中检测到的字节顺序。

  • 在 *qutfcodec_p.h* 中,两者QUtf16Codec::eQUtf32Codec::e都使用值DetectEndianness(枚举)进行初始化。

  • qutfcodec.cpp中,靠近函数的开头convertFromUnicode以及convertToUnicodeQUtf16QUtf32(由QUtf16Codecand使用QUtf32Codec),您可以找到以下行:

    endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) 
        ? BigEndianness : LittleEndianness;
    
于 2011-09-16T01:33:04.253 回答