Pergunta

Eu estou recuperando caracteres japoneses a partir de uma fonte de dados e eu quero voltar este dados para o Excel em uma XLOPER. Eu estou usando uma versão japonesa do Excel 2003 (daí XLOPERs e não XLOPER12s).

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;

O pszReturn parâmetro é atribuído a um XLOPER. O problema que tenho é que “? ? ? ? ? ??” é apresentado como “ƒAƒtƒŠƒJ,Ì- ‰ ¤” em Excel.

manualmente definir a página de código a 932 produz os mesmos resultados como CP_THREAD_ACP então eu acho que essa parte está correta.

Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

erro do usuário!

O código acima é bom. O problema é que Excel foi usando a página de código errado. Eu não tinha definido o idioma para programas não-unicode para japonês no Painel de Controle.

O código agora trabalha para a versão em Inglês Excel também.

Foi um dia e meio bem gasto ...

Outras dicas

char * é uma sequência de bytes, interpretados utilizando o conjunto de caracteres corrente. Para ser precose, que é a codificação usada pelo partido fazendo a interpretação. Neste caso, Execl está recebendo um conjunto de caracteres que deve ser interpretados usando página de código 932, mas em vez Excel está usando uma outra página de código.

A solução, como sempre é Unicode, no Excel representado por XLOPER12

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top