BSTR到CString转换为阿拉伯文本

时间:2012-05-23 07:03:19

标签: c++ visual-c++ unicode cstring bstr

我的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转换?

2 个答案:

答案 0 :(得分:1)

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

typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;

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

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

此问题也可以帮助您:How do you properly use WideCharToMultiByte

答案 1 :(得分:0)

尽管有MBCS设置,你还可以使用CString做什么,但它只支持阿拉伯语。

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