2011-10-11 97 views
0

在我的MFC應用程序,字符集設置爲「多字節」,我試圖加載一個日語字符串存儲在字符串表使用LoadStringW函數加載字符串表中的字符串,但它總是讀取垃圾字符。MFC LoadStringW是不是從字符串表正確加載日語字符串

您看到我的方法有問題嗎?

我不想將字符集更改爲Unicode。

另一個有趣的事情是,我創建了另一個示例應用程序,並將主項目中的一個日文字符串粘貼到新示例應用程序的字符串表中,然後嘗試使用LoadStringW加載日文字符串,然後運行(字符集是示例應用程序的Multibyte )

WCHAR wBuf[1024]; 
int rc; 

// load the string from resource file into a wide character array. 
rc = LoadStringW(hInstance,iResourceID, wBuf, 1024); 
+1

字符串資源總是存儲在UNICODE中,所以我不認爲字符集項目設​​置是這裏的罪魁禍首。你能用調用'LoadStringW()'的代碼更新你的問題嗎? –

+0

感謝您發佈代碼。它看起來很好,但是你在調用之後是否檢查了'rc'是否爲非零? –

+0

呼叫後'rc'不爲零。還有一種觀察是,字符串表視圖(行視圖)中的日語字符顯示垃圾字符,但如果您在記事本++中打開相同的文件,則它會顯示正確的日語字符串。 – Rahul

回答

2

確保保存資源文件utf-16格式,而不是ANSI。 Visual Studio可以很好地處理這些文件。

要這樣保存,請在Visual Studio中以文本形式打開文件。然後在文件菜單中選擇Advanced Save Options,然後在對話框中指定Unicode - Codepage 1200

然後再次保存該文件。

之後,您的資源字符串將按預期工作。

+0

+1。日文字符串在字符串表編輯器和普通文本文件中正確可見。需要在WideCharToMultiByte上工作,因爲它將日文字符轉換爲'???'根據MSDN, – Rahul

+0

,1200只是託管.Net中的有效代碼頁 –

相關問題