3

Qtのドキュメントには、(とりわけ)次のUnicode文字列エンコーディングがサポートされていると記載されています。

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

2オクテットと4オクテットでエンコードされたUnicodeにリストされている3つの異なるコーデックのため、2つの非エンディアンコーデック(「UTF-16」と「UTF-32」)がどちらのエンディアンを使用するかをどのように決定するのか疑問に思いました。

4

1 に答える 1

3

のソースコードに基づくと、src/corelibs/codecs/QtはUTF-16およびUTF-32のホストのバイト順序を使用しているようです。

BOMを持つ既存のUnicode文字列を読み取るために使用QTextCodecし、ヘッダーを無視するように明示的に要求しなかった場合、文字列で検出されたバイト順序が使用されます。

  • * qutfcodec_p.h *では、QUtf16Codec::eQUtf32Codec::eの両方が値DetectEndianness(列挙型)で初期化されます。

  • qutfcodec.cppで、関数の先頭近くにありconvertFromUnicodeクラスconvertToUnicodeQUtf16(およびによってQUtf32使用される)から、次の行を見つけることができます。QUtf16CodecQUtf32Codec

    endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) 
        ? BigEndianness : LittleEndianness;
    
于 2011-09-16T01:33:04.253 に答える