在Qt中,QTextCodec::codecForName(“UTF-16”)和codecForName(“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”)如何决定哪个使用字节序?
In the Qt documentation it states that (among others) the following Unicode string encodings are supported:
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
Due to the three different codecs listed for 2 and 4 octet encoded Unicode, I was wondering: how do the two non-endian codecs ("UTF-16" and "UTF-32") decide which endianness to use?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据 src/corelibs/codecs/ 中的源代码,Qt 似乎使用主机的 UTF-16 和 UTF-32 字节顺序。
如果您使用 QTextCodec 读取具有 BOM 的现有 Unicode 字符串,并且您没有明确要求忽略标头,则将使用在字符串中检测到的字节顺序。
在 *qutfcodec_p.h* 中,
QUtf16Codec::e
和QUtf32Codec::e
均使用值DetectEndianness
(枚举)进行初始化.在 qutfcodec.cpp 中,类
QUtf16
中的函数convertFromUnicode
和convertToUnicode
的开头附近QUtf32
(由QUtf16Codec
和QUtf32Codec
使用),您可以找到以下行:Based on the source code in
src/corelibs/codecs/
, it seems Qt uses the byte ordering of the host for UTF-16 and UTF-32.If you use
QTextCodec
to read an existing Unicode string that has a BOM, and you didn't explicitly ask to ignore the header, the byte ordering detected in the string is used.In *qutfcodec_p.h* both
QUtf16Codec::e
andQUtf32Codec::e
are initialized with the valueDetectEndianness
(an enum).In qutfcodec.cpp, near the beginning of the functions
convertFromUnicode
andconvertToUnicode
from the classesQUtf16
andQUtf32
(used byQUtf16Codec
andQUtf32Codec
), you can find the line: