Возврат японских символов через char* в Excel XLOPER

StackOverflow https://stackoverflow.com/questions/374670

  •  22-08-2019
  •  | 
  •  

Вопрос

Я получаю японские символы из источника данных и хочу вернуть эти данные в 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.У меня проблема в том, что «アフリカの女王» отображается в Excel как «ƒAƒtƒŠƒJ‚Ì—‰¤».

Установка вручную кодовой страницы 932 дает те же результаты, что и CP_THREAD_ACP, поэтому я думаю, что эта часть верна.

Любая помощь будет принята с благодарностью.

Это было полезно?

Решение

Ошибка пользователя!

Приведенный выше код хорош.Проблема в том, что Excel использовал неправильную кодовую страницу.Я не установил японский язык для программ, не поддерживающих Юникод, в Панели управления.

Код теперь работает и для английской версии Excel.

Это были полтора дня, проведенные с пользой...

Другие советы

Символ* — это последовательность байтов, интерпретируемая с использованием текущей кодировки.Чтобы быть точным, это кодировка, используемая стороной, выполняющей интерпретацию.В этом случае Execl получает кодировку, которая должен интерпретироваться с использованием кодовой страницы 932, но вместо этого Excel использует другую кодовую страницу.

Решением, как всегда, является Unicode в Excel, представленный XLOPER12.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top