我一直在用C++編寫一個新的命令行應用程序。我們支持的一個平臺當然是Windows。在windows C++控制檯應用程序中使用wchar_t/wmain有意義嗎?
默認情況下,Windows控制檯根據語言環境使用OEM代碼頁(例如,在我的計算機上,它是CP437/DOS.Western)。我想,如果它是Windows Cyrillic版本,那應該是CP866,依此類推。這些OEM代碼頁只包含256個字符)
我想這意味着Windows控制檯會根據默認代碼頁將輸入按鍵轉換爲字符。 (並且,根據當前選擇的字體,如果存在相應的字形,則顯示它)。
- 在這種情況下,在我的應用程序中使用wmain/wchar_t和寬字符類型是否有意義?
- 使用寬類型有什麼優勢嗎?或者,如果只使用char *,是否存在嚴重問題?
- 當使用寬字符類型時,命令行參數和環境字符串的編碼是什麼 - (wchar_t * argv []和wchar_t * envp []),我的意思是。他們是由Windows CRT轉換爲UTF-16,還是他們沒有改變?
感謝您的貢獻。
@oofe,感謝您的回覆。然而,至今尚不清楚的東西很少。 1. Windows命令提示符有一個默認代碼頁。當前活動的代碼頁可以通過運行chcp命令來檢索;並且可以使用相同的命令進行更改。根據您的評論,它與當前使用的鍵盤佈局無關。那麼,這有什麼意義呢?不知道交叉場景中的行爲是什麼:中文kb佈局和西里爾代碼頁。 – 2013-03-19 12:16:42
2.對於啓用了Unicode的應用程序,當從帶命令提示符的命令提示符處調用時,Windows CRT將命令行參數轉換爲UTF-16,並以wchar_t * argv []的形式傳遞給wmain()。是對的嗎?這是我在上面的問題3中的意思。 – 2013-03-19 12:25:58