在 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::e
和QUtf32Codec::e
用值DetectEndianness
初始化(枚举)。在 qutfcodec.cpp 中,函数开头附近
convertFromUnicode
和convertToUnicode
来自类(class)QUtf16
和QUtf32
(由QUtf16Codec
和QUtf32Codec
使用),您可以找到以下行:endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
关于qt - 在 Qt 中 QTextCodec::codecForName ("UTF-16") 和 codecForName ("UTF-32") 如何决定使用的字节顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430060/