2010-09-13 62 views
0

我有一定的庫(IBM的WebSphere MQ)我使用的,與被假設返回一個遠程服務器字符集的API。的Windows活動代碼頁

一些調試後,它好像這個函數調用的返回值返回我的機器的活動代碼頁。我通過查看函數調用的返回值以及在命令行中運行chcp的結果看到了這一點 - 兩個都返回了862.當我將控制面板 - >區域和語言選項 - >高級選項卡中的語言更改爲其他內容,這兩個值再次改變,這證實了我的懷疑。

我的問題是,什麼是值chcp回報? Win32 API獲取/設置它?它與場所有什麼關係? (試圖在使用std::locale::global的C++應用程序中更改全局區域設置顯然沒有影響)。

+0

另請參閱[對所有內容進行排序](http://blogs.msdn.com/b/michkap/)瞭解大量背景知識。 – MSalters 2010-09-13 09:50:44

回答

2

CHCP返回OEM代碼頁(OEMCP)。 API是Get/SetConsoleCP。

您可以設置C++語言環境「.OCP」來匹配這個區域。

0

語言環境大多識別語言,並考慮到歷史上有沒有這麼多的代碼頁(許多語言字母從26拉丁語差別不是那麼很大),幾種語言可以被‘映射’到相同的代碼頁。我記得,有沒有直接的converstion功能,但我與統計方法使它:

  • 對於我收集這些語言的話,我可以從系統獲取(LOCALE_SMONTHNAME1..LOCALE_SMONTHNAME12,LOCALE_SNATIVELANGNAME等),任何給定的語言環境以Unicode

  • 我叫WideCharToMultiByte函數爲每串試圖將它們轉換爲將此代碼頁一個字節編碼 調用WideCharToMultiByte(代碼頁CP_ACP或WC_NO_BEST_FIT_CHARS,...,@DefChar,@DefUsed);

    如果被拆除的過程中設置,這基本上意味着,這個語言是不是與此代碼頁兼容。