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。まず、このワイド文字列をマルチバイト文字列に変換する必要があります。それを行う方法は他にもありますが、そのうちの 1 つはWideCharToMultiByte functionを使用することです。

この質問も役に立ちます: WideCharToMultiByte を適切に使用するにはどうすればよいですか

于 2012-05-23T07:30:26.260 に答える
0

MBCS の設定に関係なく、CString を使用して実行しようとしていることが可能ですが、アラビア語のみがサポートされます。

おそらく、すべての Unicode のサポートを開始する方がはるかに簡単です。これは、utf8everywhere.org の Windows セクションの指示に従えば、既存のコードに大きな損傷を与えることなく実行できます (std::string と char* を保持できます)。

于 2012-05-24T03:50:57.037 に答える