setlocale -
設定當前的區域選項
#include <locale.h>
char *setlocale(int category, const char * locale);
setlocale() 函式 用來 設定
或者 查詢 程式 當前 的
區域選項.
如果
locale 不是
NULL, 程式
就會 根據 引數 更改
相應的 區域選項.
category
引數 指定 區域選項 的
哪一部分 需要 更改.
- LC_ALL
- 代表 所有 部分.
- LC_COLLATE
- 代表 正則 表示式
匹配 (和 範圍 表示式[range
expressions] 以及 字元類[classes]
有關係) 和 字串 排序.
- LC_CTYPE
- 代表 正則 表示式
匹配, 字元類(character classification),
轉換, 區分大小寫 的
比較, 以及 寬字元
函式.
- LC_MESSAGES
- 代表 可以
本地化的 訊息
(自然語言).
- LC_MONETARY
- 代表 貨幣 格式.
- LC_NUMERIC
- 代表 數字 格式
(比如 小數點 和
千位分組符).
- LC_TIME
- 代表 時間 和 日期
格式.
locale 引數 是 一個 指向
字串的 指標. 此 字串 為
category 需要的 設定. 此
字串 可以是 一個
眾所周知 的 區域選項
常量, 如 "C" 或 "da_DK"
(見下), 也可以是 另外
一個
setlocale 呼叫 返回 的
字串.
如果
locale 是
"", 需要
更改 的 部分 會根據
環境變數 做 相應的
設定. 具體的 和 實現
有關. 對於 glibc 來說, 首先
檢視 環境變數 LC_ALL (不管
category),
然後檢視
和category
(LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME)
同名的 環境變數, 最後
檢視 環境變數 LANG. 以
先查到 的 環境變數
為準. 如果 其值 不是
一個 有效 的 區域選項,
區域選項 將 不會改變,
setlocale 會 返回 NULL.
標準 區域選項
"C" 和
"POSIX" 是 可移植的;
它的 LC_CTYPE 部分 對應的 是 7
位的 ASCII 字符集.
一個 典型的 區域選項
有 如下的 格式:
language[_
territory][.
codeset][@
modifier],
其中
language 是 一個 ISO 639
語言 程式碼,
territory 是
一個 ISO 3166 國家 程式碼,
codeset 是 一個 象
ISO-8859-1
或者
UTF-8 的 字符集
或者 編碼 識別符號. 用
"locale -a", cf.
locale(1) 可以 獲得
一個 系統 支援的
區域選項 的 列表.
如果
locale 是
NULL, 意味著
只是 查詢 當前 的
區域選項 而不 更改它.
當 main 程式 開始的 時候
可移植的
"C"
區域選項 作為 預設值
被設定. 一個 程式 可以
在 初始化 之後 呼叫
setlocale(LC_ALL, "" ) 函式, 並且
從
localeconv() 呼叫 的 返回
中 獲得 和 區域選項
相關的 資訊, 如果
MB_CUR_MAX >
1 就用 多位元組 和
寬位元組 函式 來 處理
文字, 用
strcoll(),
wcscoll() 或者
strxfrm(),
wcsxfrm() 來 比較 字串,
這樣 就可以 使 程式 有
較好的 移植性.
一個 成功的
setlocale() 呼叫
會 返回 一個 表示 當前
區域選項 的 字串 (指標).
這個 字串 可能 是在
靜態 儲存區 中 分配 的.
之後 用 相應的 category 和
這個 字串 作為 引數
再去 呼叫 這個 函式 會
重新 把 程式 區域選項
的 相應 部分 恢復. 如果
請求 不能 完成 將會
返回
NULL .
ANSI C, POSIX.1
Linux (也就是, GNU libc) 支援
可移植的
"C" 和
"POSIX" 區域選項. 在
以前 它 曾經 支援 歐洲
Latin-1 區域選項
"ISO-8859-1"
(比如說 在 libc-4.5.21 和 libc-4.6.27 中),
和 俄羅斯的
"KOI-8" (更
準確點 是, "koi-8r")
區域選項 (比如 在 libc-4.6.27
中), 所以 設定 一個
環境變數 LC_CTYPE=ISO-8859-1 就 能夠
讓 isprint() 返回 正確的 結果.
現在 不講 英語 的
歐洲人 會 比以前
更麻煩 一些, 他們 需要
安裝 相應 的 區域選項
檔案.
locale(1),
localedef(1),
strcoll(3),
isalpha(3),
localeconv(3),
strftime(3),
charsets(4),
locale(7)
唐友 <[email protected]>
2001/12/2
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh