在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字符串,而您没有明确要求忽略标头,则使用该字符串中检测到的字节顺序。


在* qutfcodec_p.h *中,QUtf16Codec::eQUtf32Codec::e都用值DetectEndianness(一个枚举)初始化。
在qutfcodec.cpp中,靠近类convertFromUnicodeconvertToUnicode(由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/

10-11 23:18
查看更多