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」)がどちらのエンディアンを使用するかをどのように決定するのか疑問に思いました。
Qtのドキュメントには、(とりわけ)次のUnicode文字列エンコーディングがサポートされていると記載されています。
2オクテットと4オクテットでエンコードされたUnicodeにリストされている3つの異なるコーデックのため、2つの非エンディアンコーデック(「UTF-16」と「UTF-32」)がどちらのエンディアンを使用するかをどのように決定するのか疑問に思いました。
のソースコードに基づくと、src/corelibs/codecs/
QtはUTF-16およびUTF-32のホストのバイト順序を使用しているようです。
BOMを持つ既存のUnicode文字列を読み取るために使用QTextCodec
し、ヘッダーを無視するように明示的に要求しなかった場合、文字列で検出されたバイト順序が使用されます。
* qutfcodec_p.h *では、QUtf16Codec::e
とQUtf32Codec::e
の両方が値DetectEndianness
(列挙型)で初期化されます。
qutfcodec.cppで、関数の先頭近くにあり、convertFromUnicode
クラスconvertToUnicode
とQUtf16
(およびによってQUtf32
使用される)から、次の行を見つけることができます。QUtf16Codec
QUtf32Codec
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian)
? BigEndianness : LittleEndianness;