Win1251-> UTF16 конвертация - PullRequest
3 голосов
/ 24 ноября 2010

У меня есть dll-проект, написанный в кодировке Windows-1251, и мне нужен вывод моей dll, закодированный в UTF-16.Для преобразования я использую следующую функцию:

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

К сожалению, MultiByteToWideChar использует системную локаль в качестве исходной кодировки.Так, например, если мой языковой стандарт Windows английский (США), он конвертирует Win1252-> UTF8, а не Win1251-> UTF8, как мне нужно.

Я попытался установить языковой стандарт вручную, но следующий код не работаетлибо:

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

Как я понимаю, MultiByteToWideChar всегда использует системный языковой стандарт, игнорируя мой вызов setlocale.

Есть ли другие способы сделать такое преобразование?Или, может быть, я просто не правильно понимаю эти настройки локали?Спасибо.

PS Прошу прощения за грамматические ошибки.

Ответы [ 2 ]

11 голосов
/ 24 ноября 2010

setlocale - это функция CRT.Очевидно, что Windows API не имеет значения, что устанавливается через него.

Вы должны установить нужную кодовую страницу (1251 в вашем случае) вместо CP_ACP (что означает системное значение по умолчанию).

res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len);
0 голосов
/ 24 ноября 2010

Если вы не обязаны использовать WinAPI, вы можете использовать Преобразователь символов ICU .

...