[英]Win1251->UTF16 conversion
我有一個用Windows-1251編碼編寫的dll項目,我需要用UTF-16編碼的dll輸出。 我使用以下函數進行轉換:
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我很抱歉語法錯誤。
setlocale
是一個CRT函數。 顯然,Windows API並不關心通過它設置什么。
您應該設置所需的代碼頁(在您的情況下為1251)而不是CP_ACP
(這意味着系統默認值)。
res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len);
如果您不被迫使用WinAPI,則可能需要使用ICU的字符轉換器 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.