Frage

Ich bin Abrufen japanische Schriftzeichen aus einer Datenquelle und ich mag diese Daten in Excel in einem XLOPER zurückzukehren. Ich bin eine japanische Version von Excel 2003 verwenden (daher XLOPERs und nicht 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;

Der Parameter pszReturn wird einem XLOPER zugeordnet. Das Problem, das ich habe, ist, dass „ア フ リ カ の 女王“ als „ƒAƒtƒŠƒJ,Ì- ‰ ¤“ in Excel angezeigt.

Manuelle Einstellung der Codepage 932 die gleichen Ergebnisse wie CP_THREAD_ACP ergibt, so denke ich, dass dieser Teil richtig ist.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Benutzer-Fehler!

Der obige Code ist gut. Das Problem ist, dass Excel die falsche Codepage wurde mit. Ich hatte nicht die Sprache für Nicht-Unicode-Programme auf Japanisch in der Systemsteuerung.

Der Code funktioniert jetzt für die englische Version von Excel zu.

Es war ein Tag und eine halbe gut angelegtes ...

Andere Tipps

A char * eine Folge von Bytes ist, interpretierte den aktuellen Zeichensatz verwenden. Um precose, das ist die charset von der Partei macht die Interpretation verwendet. In diesem Fall erhält execl ein charset, dass sollte interpretiert werden unter Verwendung von Codepage 932, sondern stattdessen Excel eine andere Codepage verwendet wird.

Die Lösung, wie immer ist Unicode, in Excel dargestellt durch XLOPER12

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top