我注意到,當從MME讀取MIDI端口名稱時,名稱是使用ANSI Codepage進行編碼的多字節字符串,默認情況下我的應用程序使用該代碼頁。從DirectMusic驅動程序接收這些名稱時,這些名稱是使用OEM代碼頁編碼的寬字符字符串。請參閱this article by Raymond Chen以便快速瞭解代碼頁。使用MME和DirectMusic時的ANSI或OEM代碼頁?
在我的德制,這意味着使用當前代碼頁,這原來是ANSI一個時,我得到「Audiogerät」從MME和「Audioger ö噸」從的DirectMusic,後者是錯誤的。當我將這個姓氏當作OEM編碼處理時,這會得到解決。
那麼我怎麼知道用哪個代碼頁來解碼這些名字呢?爲什麼來自DirectMusic的名稱的編碼方式不同?它來自USB驅動程序嗎? COM框架?的DirectMusic? 如何在讀取我的MIDI端口名稱時確定知道使用哪個代碼頁?
對於信息:
- 我使用
MultiByteToWideChar()
和WideCharToMultiByte()
功能作爲論據的代碼頁使用進行轉換,從CP_ACP
和CP_OEMCP
。 - 我用
midiInGetDeviceCaps()
來從MME子系統MIDI端口信息... - ...並轉換
MIDIINCAPS.szPname
使用CP_ACP
(ANSI)代碼頁。 - 我用
IID_IDirectMusic8::EnumPort()
從獲得的DirectMusic端口信息... - ...並使用
CP_OEMCP
代碼頁轉換DMUS_PORTCAPS.wszDescription
。
你能舉出代碼示例,或者至少是你使用的特定Win32函數的名字嗎? – user9876 2009-07-01 15:38:52
通常這個「OEM代碼頁」是IBM CP437(US)。其餘時間可能是IBM CP850(歐洲)。 – 2009-07-13 04:30:18