2012-05-23 137 views
1

我的VC++(VS2008)項目使用多字節字符集。BSTR轉換爲CString的CString

我有下面的代碼日期字符串轉換爲的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:28A

是否有一個BSTR CString轉換工作在阿拉伯語設置?

+2

遠離最好的解決方案是停止使用MBCS。 –

回答

1

BSTR是串由UTF-16編碼的Unicode碼點(寬 「字符」,16位):

typedef WCHAR OLECHAR; 
typedef OLECHAR* BSTR; 

這意味着特殊字符,如 'م' 由單WCHAR表示。在多字節字符串中(C風格char*std::string)是由更多字符表示的特殊字符(因此稱爲「多字節」)。

您的CString包含垃圾字符的原因是因爲您直接從_bstr_t檢索char*。您需要首先將此寬字符串轉換爲多字節字符串。如何做到這一點有更多的方法,其中之一是使用WideCharToMultiByte function

這個問題也將幫助你:How do you properly use WideCharToMultiByte

0

你正在嘗試做的CString是可能的,儘管MBCS設置,但它只能支持阿拉伯語。

開始支持所有的Unicode可能要容易得多。如果按照utf8everywhere.org的Windows部分中的說明進行操作,可以對現有代碼(如果保留std :: string和char *)沒有太大的損害,可以完成此操作。