C 标准库系列之locale.h


  locale.h 区域设置相关,主要针对时间日期、货币格式、字符控制、数字格式等以满足某区域的设置需要。
  locale设置类别主要包括以下几个宏定义的类别:
    LC_ALL:设置所有的类别;
    LC_COLLATE:设置控制整理顺序;
    LC_CTYPE:设置字符分类;
    LC_MONETARY:设置货币的格式;
    LC_NUMERIC:设置数字格式,如小数点后位数;
    LC_TIME:设置时间日期格式;
  某些C标准库实现还提供了其他类型的设置类别扩展,如glibc实现约有12种类型;不过除以上类别外的其他类别在移植性方面可能会有影响。
  其他的如:
    LC_MESSAGES:信息提示、错误信息、状态信息、标题、标签、按钮和菜单等信息类别;
    LC_PAPER:纸张尺寸大小类别;
    LC_NAME:名称书写类别;
    LC_ADDRESS:地址书写类别;
    LC_TELEPHONE:电话号码类别;
    LC_MEASUREMENT:度量测量方式类别;
    LC_IDENTIFICATION:locale自身信息类别;
  此外在设置类别是存在一定的优先级别,即一般满足LC_ALL > LC_* >LANG;也即是前者会覆盖后者的设置,各个类别会影响相应类别的相关函数行为,如mbstowcs、strftime等。

  两个比较重要的函数,setlocale、localeconv分别为设置某类别的区域本地化信息并返回相应设置的地域化信息、获取当前设置的区域格式。
  char *setlocale( int category, const char *locale ):category即为类别,locale为设置区域信息,如"CHS","C","",”US“,等;一般可根据需要设置区域信息,不过若需要
还原时一般针对某种类别或所有的设置使用“C”即可使用默认的C编译环境,“”则使用本地区域的环境。
  struct lconv * localeconv(void):返回值为一个结构,各主要成员参数分别为:
    decimal_point:小数点;
    thousands_sep:千位数分隔符;
    grouping:分组,如3时,则为1 000 000 000的格式分组;
    int_curr_symbol:当前货币符号前置标识,如CNY,USD等;
    currency_symbol:当前货币符号标识,如¥、$等;
    mon_decimal_point:货币小数点;
    mon_thousands_sep:货币千位数分隔符;
    mon_grouping:货币分组;
    positive_sign:正值符号标识;
    negative_sign:负值符号标识;
    int_frac_digits:国际货币小数数字;
    frac_digits:货币小数数字;
    p_cs_precedes、p_sep_by_space、n_cs_precedes、n_sep_by_space、p_sign_posn、n_sign_posn:则为0或者1的值,主要用以表明符号所处的位置。
  glibc以及微软的lconv结构还有其他的成员参数,同样的这些成员也可能会有移植性问题;
  除了以上两个函数外glibc还提供了newlocale、duplocale、freelocale、uselocale区域设置的接口函数;微软的也提供了_create_locale、_free_locale、_get_current_locale、
_configthreadlocale区域设置接口,所有的以上这些接口可能都会影响可移植性。

posted @ 2016-12-04 14:00  浩月星空  阅读(2157)  评论(0编辑  收藏  举报