2010-11-24 13 views
2

Ich habe ein DLL-Projekt, in Windows-1251-Codierung geschrieben, und ich brauche meine DLL-Ausgabe in UTF-16 kodiert. Ich verwende die folgende Funktion Umwandlung zu tun:Win1251-> UTF16 Umwandlung

ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len); 

Leider MultiByteToWideChar Systemgebietsschema als Quelle-Codierung verwendet. Wenn zum Beispiel mein Windows-Gebietsschema Englisch (USA) ist, konvertiert es Win1252-> UTF8, nicht Win1251-> UTF8, wie ich es brauche.

Ich habe versucht, locale manuell einstellen, aber der folgende Code funktioniert auch nicht:

enc = setlocale(CL_ALL, "rus_rus.1251"); 
//this returns Windows-1251 encoding 
ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len); 

Wie ich verstehe, MultiByteToWideChar immer ein Systemgebietsschema verwendet, mein setlocaleQ Anruf zu ignorieren.

Gibt es andere Möglichkeiten, eine solche Konvertierung durchzuführen? Oder kann ich diese Gebietsschemaeinstellungen einfach nicht richtig verstehen? Vielen Dank.

P.S. Es tut mir leid für Grammatikfehler.

Antwort

10

setlocale ist eine CRT-Funktion. Offensichtlich kümmert sich Windows-API nicht, was über es eingestellt wird.

Sie sollten die benötigte Codepage (1251 in Ihrem Fall) anstelle von CP_ACP (was Systemvorgabe bedeutet) einstellen.

res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len);