這個標準幾乎沒有說明什麼是有效的語言環境名稱;只有通過無效的區域設置名稱導致std::runtime_error
。常見的Windows編譯器上可以使用哪些語言環境名稱,如MSVC,MinGW和ICC?常見的Windows編譯器上有哪些std :: locale名稱可用?
回答
我相信你需要的信息是here:
locale "lang[_country_region[.code_page]]"
| ".code_page"
| ""
| NULL
該頁面提供的鏈接:
雖然我的答案,佔地面積setlocale
,而不是std::locale
,this MSDN page似乎暗示格式確實是相同的:
類區域的目的還存儲 區域設置名稱類 字符串的對象。使用無效語言環境名稱 構造語言環境構面或 區域設置對象會拋出 類
runtime_error
的對象。如果區域設置 對象無法確定 C風格的區域設置完全對應於由對象表示的 ,則存儲的 區域設置名稱爲「*」。 否則,您可以在標準C 庫中爲語言環境對象loc建立一個匹配的語言環境,編號爲 ,調用setlocale(LC_ALL, loc.name.c_str)
。
另見this page和this thread這往往表明std::locale
內部使用setlocale
。
下面是一個可用於任何地方的語言環境名稱:""
。也就是空字符串。這與您可能默認獲取的"C"
語言環境形成鮮明對比。作爲std::setlocale()
的參數的空字符串表示類似於「使用用戶或環境設置的首選語言環境」。如果你使用它,缺點是你的程序在任何地方都不會有相同的輸出;好處是你的用戶可能會認爲它按照他們想要的方式工作。
好的,C和C++區域設置有區別。
讓我們開始:
MSVC C++的std ::區域設置和C的setlocale
接受區域命名爲 「語言[_公司] [代碼頁。]」 例如 「English_United States.1251」 否則會拋出。注:代碼頁不能是65001/UTF-8,並應與ANSI代碼一致此語言環境(或只是略)
MSVC C++的std ::區域設置和C的setlocale在Vista和Windows 7應該接受的語言環境 [語言] [ - 腳本] [ - 國家]像使用ISO-631語言代碼的「en-US」和使用ISO 3166區域和腳本名稱的 。我在Windows 7上用Visual Studio測試過它 - 它不起作用。
MinGW C++ std :: locale接受「C」和「POSIX」它不支持其他語言環境,實際上gcc僅支持GNU C庫的語言環境 - 基本上只在Linux下。
setlocale是原生的Windows API調用,所以應該支持上面提到的所有內容。
當與替代C++庫 (如Apache stdcxx或STL端口)一起使用時,它可以支持更廣泛的區域設置。
ICC - 我沒有測試過它,但它取決於它使用的標準C++庫。對於 在Linux下的示例,它使用GCC的libstdC++,因此它支持gcc 支持的所有語言環境。我不知道它在Windows下使用什麼標準C++庫。
如果你想擁有「的編譯器和平臺」獨立語言環境支持(實際上 更好的支持),看看在Boost.Locale
阿爾喬姆
- 1. Windows上的SASS編譯器非常慢
- 2. TDD有哪些常見的誤解?
- 3. jQuery有哪些常見的誤解?
- 4. std :: for_each和functors - operator()有哪些簽名?
- 5. Windows上的Mac編譯器
- 6. 在Windows上有ActionScript的編譯器嗎?
- 7. C++編譯器 - 常見符號
- 8. 哪些Windows編譯器支持<future>類
- 9. C++ - 當運行Moses解碼器時locale名稱無效異常
- 10. timespec在Windows編譯器上
- 11. cmake不可見的Visual Studio編譯器
- 12. 使用iconv編譯器在Windows上使用Mingw編譯器
- 13. 文本編輯器應該支持哪些常見的字符編碼?
- 14. 有哪些工具和庫可用於實現針對CLR的編譯器?
- 15. 應關閉哪些編譯器警告?
- 16. 有人可以擴展一些常見的Crossfilter變量名嗎?
- 17. 哪些編譯器支持Haskell FFI
- 18. C++程序員有哪些常見的Java陷阱/陷阱?
- 19. 哪個scala編譯器插件可用?
- 20. NAnt編輯器有哪些?
- 21. XSLT - 使用常見的元素名稱
- 22. 幫助使用std :: locale?
- 23. 編譯器執行哪些算術操作(如果有的話)?
- 24. 基於C預處理器宏,可在編譯時檢測平臺/編譯器的庫有哪些?
- 25. Libc的名稱和編譯器
- 26. 什麼是SAP,它有哪些常見的應用程序?
- 27. 在SQL去除列名稱的某些常見的文本
- 28. C編程 - 在編譯時挑選機器名稱,用戶名
- 29. 使用Akka Microkernel有哪些常見用例?
- 30. 爲什麼Closure編譯器不能用某些名稱重命名對象?
+1 - 但`的setlocale `!=`std :: locale` ... – 2010-12-20 13:55:40
@Billy:answer編輯 – icecrime 2010-12-20 14:07:53