Возврат японских символов через char* в Excel XLOPER
Я извлекаю японские символы из источника данных и хочу вернуть эти данные в Excel в XLOPER. Я использую японскую версию Excel 2003 (следовательно, XLOPER, а не XLOPER12).
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. У меня проблема в том, что "アフリカの女王" отображается как "ƒAƒtƒŠƒJ‚Ì—‰¤" в Excel.
Установка кодовой страницы на 932 вручную дает те же результаты, что и CP_THREAD_ACP, поэтому я считаю, что эта часть верна.
Любая помощь будет принята с благодарностью.
2 ответа
Ошибка пользователя!
Код выше хорош. Проблема в том, что Excel использовал неправильную кодовую страницу. Я не установил язык для не-юникодных программ на японский в Панели управления.
Код теперь работает и для английской версии Excel.
Это были полтора дня, хорошо проведенные...
Char* - это последовательность байтов, интерпретируемая с использованием текущего набора символов. Чтобы быть прекозой, это кодировка, используемая стороной, выполняющей интерпретацию. В этом случае Execl получает кодировку, которую следует интерпретировать с использованием кодовой страницы 932, но вместо этого Excel использует другую кодовую страницу.
Решением, как всегда, является Unicode, в Excel, представленном XLOPER12