3

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

4

2 回答 2

2

微软的话说,Unicode通常是 UTF-16 的同义词(如果有记忆,则为小端序)。在BSTR的情况下,答案似乎取决于

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

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

于 2010-10-29T19:49:43.703 回答
1

Windows 上的 BSTR 最初包含 UCS-2,但原则上可以包含整个 unicode 集,使用代理对。UTF-16 支持实际上取决于接收字符串的 API - BSTR 没有说明如何处理它。到目前为止,大多数 API 都支持 UTF-16。(迈克尔·卡普兰整理了细节。)

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 或类似的东西中使用。)

于 2010-10-29T20:24:55.033 回答