setlocale(LC_ALL,) 中的 LC_* 是什么意思,以及 LANGUAGE/LANG 都是些啥?
這些都是個啥?
上面提到的種種,實際上都是 區域 設置相關的東西,因此今天我們所提到的東西都和區域有關。
首先 setlocale(...) 是啥?
setLocale(...) 是C庫中的一個設置地域化信息的C函數。
函數原型為:
char *setlocale(int category, const char *locale)參數解釋:
category – 這是一個已命名的常量,指定了受區域設置影響的函數類別,可以設置為以下值。
LC_ALL // 包括下面的所有選項。
LC_COLLATE // 字符串比較。參見 strcoll()。
LC_CTYPE // 字符分類和轉換。例如 strtoupper()。
LC_MONETARY // 貨幣格式,針對 localeconv()。
LC_NUMERIC // 小數點分隔符,針對 localeconv()。
LC_TIME // 日期和時間格式,針對 strftime()。
LC_MESSAGES // 系統響應。
locale – 如果 locale是 NULL 或空字符串 "",則區域名稱將根據環境變量值來設置,其名稱與上述的類別名稱相同。
一般程序遇到編碼方面的問題,百度都會告訴你設置setlocale(LC_ALL,"")來解決,下面我們就了解一下這句代碼做了什么.
LC_ALL,LE_* 又是個啥?
實際上 LC_ALL,LE_* 是 區域 相關的環境變量。簡而言之,LC_COLLATE,LC_TYPE等等都是環境變量。
很多程序的運行行為在全球不同的地域、語言環境中是不一樣的,例如Linux 中的 date命令的行為就受LC_TIME的影響:
因此自然需要一些環境變量來告訴計算機用戶所處的地區、語言等等,而locale是用來設置、查詢、管理這些變量的linux命令。
那么 LE_* 都包含啥?
首先來看一些都有哪些需要設置的變量,通過在 linux 系統命令行中輸入locale 就可以打印所有相關的環境變量以及對應的值。
一般會包括:
一般認為由于區域和語言導致的不同習慣大致就是這12類。但是你從 linux 系統命令中輸入 locale 獲取到的結果可能不止這12個,還有LANG,LANGUAGE和LC_ALL,那是這三個比較特殊。
如何修改?
在程序中通過調用 setlocale(...) 來進行修改。
linux 中可以通過下面幾種方式來修改:
使用locale -a可以列出本機目前可以使用的值。locale -av還可以具體查看這些值更詳細的信息。
??
變量生效的優先順序從高到低如下:
總結
以上是生活随笔為你收集整理的setlocale(LC_ALL,) 中的 LC_* 是什么意思,以及 LANGUAGE/LANG 都是些啥?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔试常见逻辑题
- 下一篇: Redis-主从、哨兵、集群