BSTR UTF-16 кодируется? - PullRequest
       5

BSTR UTF-16 кодируется?

3 голосов
/ 29 октября 2010

Я пытаюсь выучить Unicode? Для меня самой сложной частью является кодировка. Могут ли BSTR (Basic String) содержать кодовые точки U + 10000 или выше? Если нет, то какова кодировка для BSTR?

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

В Microsoft-говоря, Unicode , как правило, синонимичен с UTF-16 (младший, если память служит) В случае BSTR ответ кажется , это зависит :

  • В Microsoft Windows состоит из строки символов Unicode (широкий или двухбайтовые символы).
  • В Apple Power Macintosh состоит из однобайтовой строки.
  • Может содержать несколько встроенных нулевых символов.

Итак, в Windows, да, он может содержать символы вне базовой многоязычной плоскости, но для их хранения потребуется два широких символа.

1 голос
/ 30 октября 2010

BSTR в Windows изначально содержали UCS-2, но в принципе могут содержать весь набор Unicode, используя суррогатные пары . Поддержка UTF-16 на самом деле зависит от API, который получает строку - BSTR не знает, как с ней обращаться. Большинство API поддерживают UTF-16 к настоящему времени. ( Майкл Каплан разбирается в деталях.)

Заголовки окон по-прежнему содержат другое определение BSTR, в основном это

#if defined(_WIN32) && !defined(OLE2ANSI)
   typedef wchar_t OLECHAR;
#else
   typedef char OLECHAR;
#endif
typedef OLECHAR * BSTR;

Нет никакой реальной причины рассматривать char, если только вы отчаянно не хотите быть совместимым с тем, для чего это было. (IIRC был активен - или мог быть активирован - для ранних сборок MFC и, возможно, даже использовался в Office для Mac или что-то в этом роде.)

...