Pregunta

Estoy recuperación de los caracteres japoneses de una fuente de datos y quiero devolver estos datos a Excel en un XLOPER. Estoy usando una versión japonesa de Excel 2003 (de ahí XLOPERs y no 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;

El parámetro pszReturn se asigna a un XLOPER. El problema que tengo es que “ア フ リ カ の 女王” se muestra como “ƒAƒtƒŠƒJ,Ì- ‰ ¤” en Excel.

La configuración manual de la página de códigos a 932 produce los mismos resultados que CP_THREAD_ACP así que creo que esa parte es correcta.

Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Error del usuario!

El código anterior es buena. El problema es que Excel se utiliza la página de código incorrecto. No había puesto el idioma para programas no Unicode a los japoneses en el Panel de control.

El código ahora trabaja para la versión en Inglés de Excel también.

Ese fue un día y medio bien gastado ...

Otros consejos

A char * es una secuencia de bytes, interpretado utilizando el juego de caracteres actual. Para ser Precose, es decir el conjunto de caracteres utilizado por la parte que hace la interpretación. En este caso, Execl está recibiendo un conjunto de caracteres que debe interpretarse utilizando la página de códigos 932, pero en lugar de Excel está utilizando otra página de códigos.

La solución, como siempre es Unicode, en Excel representado por XLOPER12

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top