2010-11-24 7 views
2

J'ai un projet dll, écrit en codage Windows-1251, et j'ai besoin de la sortie de ma dll codée en UTF-16. J'utilise la fonction suivante pour faire la conversion:Win1251-> conversion UTF16

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

Malheureusement, MultiByteToWideChar utilise paramètres régionaux du système comme source d'encodage. Par exemple, si mon environnement local Windows est l'anglais (USA), il convertit Win1252-> UTF8, pas Win1251-> UTF8 comme j'ai besoin.

J'ai essayé de mettre en valeur manuellement, mais le code suivant ne fonctionne pas non plus:

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

Si je comprends bien, MultiByteToWideChar utilise toujours un lieu de système, ignorant mon appel setlocale.

Existe-t-il d'autres méthodes pour effectuer une telle conversion? Ou peut-être que je ne comprends pas ces paramètres régionaux correctement? Merci.

P.S. Je suis désolé pour les erreurs de grammaire.

Répondre

10

setlocale est une fonction CRT. De toute évidence, l'API Windows ne se soucie pas de ce qui est défini via elle.

Vous devez définir la page de codes requise (1251 dans votre cas) au lieu de CP_ACP (ce qui signifie la valeur par défaut du système).

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