2

データ ソースから日本語の文字を取得しており、このデータを XLOPER で Excel に返したいと考えています。日本語版の Excel 2003 を使用しています (したがって、XLOPER12 ではなく XLOPER です)。

wchar_t* pszW = OLE2W(bstrResult); //I have the data I am trying to copy in a CComBSTR

ULONG ulSize = ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, NULL, 0, NULL, NULL );                        

if ( ulSize )
{   
   char* tmp = new char[ulSize + 1];
   tmp[ulSize]='\0';
   ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, LPSTR( tmp ), ulSize, NULL, NULL );
   pszReturn = tmp;     
}
wchar_t* pwszOut = new wchar_t[bstrResult.Length () + 1];

//now turn it back to test that that the correct code page was used. For debugging purposes only!
::MultiByteToWideChar (CP_THREAD_ACP,0, LPSTR(pszReturn),-1,pwszOut,bstrResult.Length () + 1);

//pwszOut and bstrResult look the same in the debugger              
delete [] pwszOut;

パラメータ pszReturn は XLOPER に割り当てられます。私が抱えている問題は、「アフリカの女王」がExcelで「ƒAƒtƒŠƒJ‚Ì—‰¤」と表示されることです。

コードページを手動で 932 にすると CP_THREAD_ACP と同じ結果になるので、その部分は正しいと思います。

どんな助けでも大歓迎です。

4

2 に答える 2

2

ユーザーエラー!

上記のコードは良いです。問題は、Excel が間違ったコード ページを使用していたことです。コントロール パネルで、非 Unicode プログラムの言語を日本語に設定していませんでした。

このコードは、英語版の Excel でも機能するようになりました。

充実した1日半でした…

于 2008-12-17T16:08:36.050 に答える
0

char* は、現在の文字セットを使用して解釈される一連のバイトです。正確には、解釈を行う側が使用する文字セットです。この場合、Execl はコードページ 932 を使用して解釈されるべき文字セットを受信して​​いますが、Excel は別のコードページを使用しています。

XLOPER12 で表される Excel のソリューションは、いつものように Unicode です。

于 2008-12-17T14:38:10.007 に答える