Question

Je suis en train de récupérer les caractères japonais à partir d'une source de données et je veux retourner ces données vers Excel dans un XLOPER. J'utilise une version japonaise d'Excel 2003 (d'où XLOPERs et non 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;

Le paramètre pszReturn est affecté à un XLOPER. Le problème que j'ai est que « ア フ リ カ の 女王 » est affiché comme « ƒAƒtƒŠƒJ,Ì- ‰ ¤ » dans Excel.

Réglage manuel de la page de code 932 donne les mêmes résultats que CP_THREAD_ACP donc je pense que cette partie est correcte.

Toute aide serait grandement appréciée.

Était-ce utile?

La solution

Erreur utilisateur!

Le code ci-dessus est bon. Le problème est que Excel utilisait la page de code erroné. Je n'avais pas mis la langue pour les programmes non-unicode en japonais dans le Panneau de configuration.

Le code fonctionne maintenant pour la version anglaise d'Excel aussi.

Ce fut une journée et demie bien passé ...

Autres conseils

char * est une séquence d'octets, interprété en utilisant le jeu de caractères en cours. Pour être precose, qui est le jeu de caractères utilisé par le parti pour cette interprétation. Dans ce cas, Execl reçoit un charset devraient être interprété à l'aide codepage 932, mais Excel utilise une autre page de code.

La solution, comme toujours Unicode, dans Excel représenté par XLOPER12

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top