1

我的 VC++ (VS2008) 项目使用多字节字符集。

我有以下代码将日期字符串转换为 COleDateTime

_bstr_t bstr_tDate = bstrDate; //bstrDate is populated by a COM function

const CString szStartDateTime = bstr_tDate.operator const char *();

bool bParseOK = oleDateTime.ParseDateTime(szStartDateTime);

此代码适用于所有区域设置,但在阿拉伯语区域设置中失败,输入日期为以下格式:21/05/2012 11:50:31م

转换后,CString 包含垃圾字符,解析失败:01/05/2012 11:50:28ã

是否有适用于阿拉伯语设置的 BSTR 到 CString 的转换?

4

2 回答 2

1

BSTR是由 UTF-16 编码的 Unicode 代码点(宽“字符”,16 位)组成的字符串:

typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;

这意味着像 'م' 这样的特殊字符由 single 表示WCHAR。在多字节字符串(C 风格char*std::string)中,这些特殊字符由更多字符表示(因此称为“多字节”)。

CString包含垃圾字符的原因是因为您char*直接从_bstr_t. 您需要先将此宽字符字符串转换为多字节字符串。有更多方法可以做到这一点,其中之一是使用WideCharToMultiByte 函数

这个问题也会帮助你:你如何正确使用 WideCharToMultiByte

于 2012-05-23T07:30:26.260 回答
0

尽管有 MBCS 设置,但您尝试使用 CString 进行操作是可能的,但它仅支持阿拉伯语。

开始支持所有 Unicode 可能要容易得多。如果您按照 utf8everywhere.org 的 Windows 部分中的说明进行操作,则可以在不对现有代码造成太大损害的情况下完成此操作(您可以保留 std::string 和 char*)。

于 2012-05-24T03:50:57.037 回答