是BSTR UTF-16编码?

时间:2010-10-29 19:38:47

标签: windows unicode bstr

我正在尝试学习Unicode?对我来说,最困难的部分是编码。 BSTR(基本字符串)内容代码是否可以指向U + 10000或更高?如果不是,那么BSTR的编码是什么?

2 个答案:

答案 0 :(得分:2)

Microsoft-speak, Unicode中通常与UTF-16同义(如果内存服务,则为小端)。在BSTR的情况下,答案似乎是它取决于

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

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

答案 1 :(得分:1)

Windows上的BSTR最初包含UCS-2,但原则上可以使用surrogate pairs包含整个unicode集。 UTF-16支持实际上取决于接收字符串的API - BSTR没有说明如何处理它。大多数API现在都支持UTF-16。 (Michael Kaplan对细节进行了分类。)

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

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

然而,没有真正的理由考虑char,除非你拼命想要与之相容。 (IIRC它是活跃的 - 或者可能被激活 - 用于早期的MFC构建,甚至可能已经在Office for Mac或类似的东西中使用过。)