В Qt как QTextCodec :: codecForName ("UTF-16") и codecForName ("UTF-32") решают, что использовать порядок байтов? - PullRequest
3 голосов
/ 15 сентября 2011

В документации Qt говорится, что (среди прочего) поддерживаются следующие кодировки строк Unicode:

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

В связи сМне было интересно узнать, как три разных кодека перечислены для кодировки Unicode с 2 и 4 октетами: как два кодека без порядкового номера («UTF-16» и «UTF-32») решают, какой порядок байтов использовать?

1 Ответ

3 голосов
/ 16 сентября 2011

Исходя из исходного кода в src/corelibs/codecs/, похоже, Qt использует порядок байтов хоста для UTF-16 и UTF-32.

Если вы используете QTextCodec для чтения существующей строки Unicode, у которой есть спецификация, и вы явно не просили игнорировать заголовок, используется порядок байтов, обнаруженный в строке.

  • In * qutfcodec_p.h * и QUtf16Codec::e, и QUtf32Codec::e инициализируются значением DetectEndianness (перечисление).

  • В qutfcodec.cpp , рядом с началом функций convertFromUnicode и convertToUnicode из классов QUtf16 и QUtf32 (используется QUtf16Codec и QUtf32Codec ), вы можете найти строку:

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