BSTR UTF-16编码?

我正在努力学习Unicode的过程? 对我来说,最困难的部分是编码。 BSTRs(基本string)内容代码点是U + 10000还是更高? 如果不是,那么BSTR的编码是什么?

在微软的说法中,Unicode通常与UTF-16(如果内存服务的话是小端的)是同义的。 在BSTR的情况下,答案似乎取决于

  • 在Microsoft Windows上,由一串Unicode字符(宽或双字节字符)组成。
  • 在Apple Power Macintosh上,由一个单字节字符串组成。
  • 可能包含多个嵌入的空字符。

所以,在Windows上,是的,它可以包含基本的多语言平面以外的字符,但是这需要两个“宽”的字符来存储。

Windows上的BSTR最初包含UCS-2,但原则上可以包含整个unicode集,使用代理对 。 UTF-16支持实际上取决于接收字符串的API – BSTR没有说明如何处理。 现在大部分的API都支持UTF-16。 ( 迈克尔·卡普兰 ( Michael Kaplan )对细节进行了梳理。

窗口标题仍然包含BSTR的另一个定义,它基本上

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

然而,除非你拼命地想要与之相适应,否则没有必要考虑char 。 (IIRC它是积极的 – 或者可以被激活 – 为早期的MFC构建,甚至可能已被用于Mac的办公室或类似的东西。