2010-11-24 58 views
2

我有一個用Windows-1251編碼編寫的dll-project,我需要用UTF-16編碼我的dll輸出。我用下面的函數來執行轉換:Win1251-> UTF16轉換

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調用。

有沒有其他方法可以做這種轉換?或者可能是我只是不正確地理解這些區域設置?謝謝。

P.S.我很抱歉語法錯誤。

回答

10

setlocale是一個CRT功能。顯然,Windows API不關心通過它設置的內容。

你應該設置所需的代碼頁(1251在你的情況下)而不是CP_ACP(這意味着系統默認)。

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