我的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转换?
答案 0 :(得分:1)
BSTR是由UTF-16编码的Unicode代码点组成的字符串(宽“字符”,16位):
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
表示像'م'这样的特殊字符由单WCHAR
表示。在多字节字符串(C风格char*
或std::string
)中,这些特殊字符由更多字符表示(因此称为“多字节”)。
您的CString
包含垃圾字符的原因是您直接从char*
检索_bstr_t
。您需要先将此宽字符串转换为多字节字符串。有更多方法可以做到这一点,其中之一就是使用WideCharToMultiByte function。
答案 1 :(得分:0)
尽管有MBCS设置,你还可以使用CString做什么,但它只支持阿拉伯语。
开始支持所有Unicode可能要容易得多。如果您按照utf8everywhere.org的Windows部分的说明操作,这可以在不对现有代码造成太大损害的情况下完成(您可以保留std :: string和char *)。