总览 (SYNOPSIS)

#include <locale.h>

char *setlocale(int category, const char * locale);

描述 (DESCRIPTION)

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.

标准 区域选项 CPOSIX 是 可移植的; 它的 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) 可以 获得 一个 系统 支持的 区域选项 的 列表.

如果 localeNULL, 意味着 只是 查询 当前 的 区域选项 而不 更改它.

当 main 程序 开始的 时候 可移植的 C 区域选项 作为 默认值 被设置. 一个 程序 可以 在 初始化 之后 调用 setlocale(LC_ALL, ) 函数, 并且 从 localeconv() 调用 的 返回 中 获得 和 区域选项 相关的 信息, 如果 MB_CUR_MAX > 1 就用 多字节 和 宽字节 函数 来 处理 文本, 用 strcoll(), wcscoll() 或者 strxfrm(), wcsxfrm() 来 比较 字符串, 这样 就可以 使 程序 有 较好的 移植性.

返回值 (RETURN VALUE)

一个 成功的 setlocale() 调用 会 返回 一个 表示 当前 区域选项 的 字符串 (指针). 这个 字符串 可能 是在静态 存储区 中 分配 的. 之后 用 相应的 category 和 这个 字符串 作为 参数 再去调用 这个 函数 会 重新 把 程序 区域选项 的 相应 部分 恢复. 如果 请求 不能 完成将会 返回 NULL .

遵循 (CONFORMING TO)

ANSI C, POSIX.1

注意 (NOTES)

Linux (也就是, GNU libc) 支持 可移植的 CPOSIX 区域选项. 在 以前 它 曾经 支持 欧洲 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() 返回 正确的 结果. 现在 不讲英语 的 欧洲人 会 比以前 更麻烦 一些, 他们 需要 安装 相应 的 区域选项 文件.

setlocale - 设置当前的区域选项的更多相关文章

  1. 检测当前的语言环境是否使用了 UTF-8 编码(三篇文章:先用setlocale()设置编码,再用nl_langinfo()进行检测。locale对象可以使用langLocale.name() == "zh_CN"判断)

    C/C++程序中,locale(即系统区域设置,即国家或地区设置)将决定程序所使用的当前语言编码.日期格式.数字格式及其它与区域有关的设置,locale设置的正确与否将影响到程序中字符串处理(wcha ...

  2. strcoll - 用当前的区域选项来比较两个字符串

    总览 (SYNOPSIS) #include <string.h> int strcoll(const char *s1, const char *s2); 描述 (DESCRIPTION ...

  3. sqlserver -- 学习笔记(三)解决php连接sqlserver2005视图时显示“异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项”的问题

    --php5.2 --sqlserver2005 php连接sqlserver的视图aa,语句如下: $query = mssql_query("select * from dbo.aa&q ...

  4. HTML中的<select>标签如何设置默认选中的选项

    方法有两种. 第一种通过<select>的属性来设置选中项,此方法可以在动态语言如php在后台根据需要控制输出结果. 1 2 3 4 5 < select  id =  " ...

  5. [转]在.NET Core 2.x中将多个强类型设置实例与命名选项一起使用

    自1.0版之前,ASP.NET Core已使用“ 选项”模式配置强类型设置对象.从那时起,该功能获得了更多功能.例如,引入了ASP.NET Core 1.1 IOptionsSnapshot,它允许您 ...

  6. NX二次开发-UFUN工程图表格注释设置单元格首选项UF_TABNOT_set_cell_prefs

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...

  7. TCP回射客户服务器模型(02 设置套接字选项、处理多并发)

    int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);  //设置套接字选项 ...

  8. Selenium2学习-024-WebUI自动化实战实例-022-网站不同分辨率下页面样式展示兼容性问题解决方案 -- 设置浏览器显示区域大小(无人值守,节约测试成本的福音,BOSS 最爱)

    在 Web UI 自动化测试的过程中,通常会测试页面在不同分辨率下的显示效果,即在不同大小的显示器上全屏浏览器后的页面展示,此种测试方法需要购置不同大小的显示器,或者频繁的设置屏幕分辨率,不仅浪费了大 ...

  9. Android 设置界面的圆角选项

    请先看一个图: 像这种界面的设计,其实是这样的:整体为一个LinearLayout,一个一个排下去,每一个点击项都是一个RelativeLayout(要为其设置clickable为true),分为左右 ...

随机推荐

  1. CSS实现三级菜单[转]

    头部导航条布局 html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  2. python搭建服务,传输文件

    一.进入需要共享的文件目录 #cd /home #python -m SimpleHTTPServer 二.浏览器访问资源 再浏览器地址栏输入: 服务器IP:8000 如图:

  3. MFC的Dlg和App什么区别?应用程序类与对话框类

    MFC里有个app类..他是一个项目工程类,有一个全局的实例化.theApp你可以理解为整个项目的实例,它重载了入口函数,所有的窗口神马的,都是在这个类里实例化的. dlg是对话框,是一个窗口.一个程 ...

  4. bzoj4455 & loj2091 [Zjoi2016]小星星 容斥原理+树形DP(+状压DP?)

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4455 https://loj.ac/problem/2091 题解 很不错的一道题.(不过在当 ...

  5. centos7安装nginx并配置web前端环境。

    1.安装nginx -sudo yum install nginx 2.启动nginx - systemctl start nginx 3.修改nginx路径配置,/etc/nginx/nginx.c ...

  6. js 属性getset

    属性访问器 一.像C#写实体类一样的写法 var attr={ $x:10,//必须$开头 get x() { return this.$x+1; }, set x(val) { this.$x=va ...

  7. 企业打开云HBase的正确方式,来自阿里云云数据库团队的解读

    一.HBase的历史由来 HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性.高性能.高伸缩的分布式存储系统,使用HBase技术可在廉价PC Se ...

  8. 浅析弹性公网IP付费模式和短时升配功能介绍

    ​ 弹性公网IP付费模式对比 弹性公网IP(EIP),有两种付费方式.一种是预付费,一种是后付费.对于预付费弹性公网IP而言,最大的优点就是带宽费用便宜,相对于后付费有比较大的优惠. 例如,杭州地域6 ...

  9. SCJP之赋值

    1:基本变量赋值与另一个基本变量 public class Test { public static void main(String[] args) { int a=10; int b=a; b=3 ...

  10. CocoaPods中pod search报错的解决办法

    pod search报错的原因: 每次使用pod search命令的使用会在该目录下生成一个search_index.json文件,会逐渐的增大,文件达到一定大小后,ruby解析里面的json字符就会 ...