日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

setlocale(LC_ALL,) 中的 LC_* 是什么意思,以及 LANGUAGE/LANG 都是些啥?

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的影響:

$ LC_TIME=en_US.UTF-8 date Fri Oct 31 19:51:16 CST 2014 $ LC_TIME=fi_FI.UTF-8 date pe 31.10.2014 19.52.00 +0800 $ LC_TIME=zh_CN.UTF-8 date 2014年 10月 31日 星期五 19:53:07 CST

因此自然需要一些環境變量來告訴計算機用戶所處的地區、語言等等,而locale是用來設置、查詢、管理這些變量的linux命令。

那么 LE_* 都包含啥?

首先來看一些都有哪些需要設置的變量,通過在 linux 系統命令行中輸入locale 就可以打印所有相關的環境變量以及對應的值。

一般會包括:

  • LC_CTYPE – 語言符號及其分類
  • LC_NUMERIC – 數字
  • LC_COLLATE – 比較和排序習慣
  • LC_TIME – 時間顯示格式
  • LC_MONETARY – 貨幣單位
  • LC_MESSAGES – 信息主要是提示信息,錯誤信息,狀態信息,標題,標簽,按鈕和菜單等
  • LC_NAME – 姓名書寫方式
  • LC_ADDRESS – 地址書寫方式
  • LC_TELEPHONE – 電話號碼書寫方式
  • LC_MEASUREMENT – 度量衡表達方式
  • LC_PAPER – 默認紙張尺寸大小
  • LC_IDENTIFICATION – 對locale自身包含信息的概述
  • 一般認為由于區域和語言導致的不同習慣大致就是這12類。但是你從 linux 系統命令中輸入 locale 獲取到的結果可能不止這12個,還有LANG,LANGUAGE和LC_ALL,那是這三個比較特殊。

  • LANG – 是一個缺省值,所有沒有顯式設置值的LC_*變量都會取LANG的值。
  • LANGUAGE – 的優先級比較高,會覆蓋所有設置過的LC_*的值
  • LC_ALL – 并不是一個環境變量,而是一個glibc中定義的一個宏,實際上則是調用了setlocale把所有的LC_*的變量設置了一遍
  • 如何修改?

    在程序中通過調用 setlocale(...) 來進行修改。

    linux 中可以通過下面幾種方式來修改:

  • 創建或編輯/etc/locale.conf對系統級進行設置
  • 創建或編輯~/.config/locale.conf對當前用戶進行設置
  • 在終端執行export LC_TIME=xxxx對當前終端進行設置
  • 通過localectl命令來修改,比如localectl set-locale LANG=en_US.utf8
  • 使用locale -a可以列出本機目前可以使用的值。locale -av還可以具體查看這些值更詳細的信息。
    ??
    變量生效的優先順序從高到低如下:

  • LANGUAGE 優先級最高,指定個人對語言環境值的主次偏好,例如 zh_CN:en_US:en,冒號分隔的是多種選擇。
  • LC_ALL 設置的值
  • LC_* 可設定locale各方面的值,可以覆蓋LANG的值。
  • LANG 指定默認使用的locale值
  • 總結

    以上是生活随笔為你收集整理的setlocale(LC_ALL,) 中的 LC_* 是什么意思,以及 LANGUAGE/LANG 都是些啥?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。