qt - 在 Qt 中 QTextCodec::codecForName ("UTF-16") 和 codecForName ("UTF-32") 如何决定使用的字节顺序?

标签 qt endianness utf-16 byte-order-mark utf-32

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

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

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

最佳答案

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

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

  • 在 *qutfcodec_p.h* 中 QUtf16Codec::eQUtf32Codec::e用值 DetectEndianness 初始化(枚举)。

  • qutfcodec.cpp 中,函数开头附近 convertFromUnicodeconvertToUnicode来自类(class)QUtf16QUtf32 (由 QUtf16CodecQUtf32Codec 使用),您可以找到以下行:

    endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) 
        ? BigEndianness : LittleEndianness;
    

关于qt - 在 Qt 中 QTextCodec::codecForName ("UTF-16") 和 codecForName ("UTF-32") 如何决定使用的字节顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430060/

相关文章:

c++ - 项目错误 : Unknown module(s) in QT: charts on Mac

scala - 读取流时出现java.nio.charset.MalformedInputException

c - Linux 上 UTF-16 的 wchar_t?

text - UTF-8 字符串总是比 UTF-16 短吗?

regex - 为什么 QString 不能传递形式为 ("[\\x00-\\xff]*") 的 QRegExp?

android - 动态创建 ListModel 列表

android - Qt 5.2 和 Android 错误

c++ - 交换 float 组中的字节

c - 检查整数和字符数组的内存时字节顺序不一致

java - 如何将字节数组转换为 Int 数组