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

发布于 2024-12-05 06:22:13 字数 273 浏览 1 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

强者自强 2024-12-12 06:22:13

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

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

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

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

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

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 and QUtf32Codec::e are initialized with the value DetectEndianness (an enum).

  • In qutfcodec.cpp, near the beginning of the functions convertFromUnicode and convertToUnicode from the classes QUtf16 and QUtf32 (used by QUtf16Codec and QUtf32Codec), you can find the line:

    endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) 
        ? BigEndianness : LittleEndianness;
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文