setlocale函数作用

setlocale:
函数原形为:char *setlocale( int category, const char *locale );
头文件:<locale.h>
所支持的操作系统为:ANSI, Win 95, Win NT
对于简体中文可以使用如下设置:setlocale( LC_ALL, "chs" );

为什么一定要调用setlocale呢?
因为在C/C++语言标准中定义了其运行时的字符集环境为"C",也就是ASCII字符集的一个子集,那么mbstowcs在工作时会将cstr中所包含的字符串看作是ASCII编码的字符,而不认为是一个包含有chs编码的字符串,所以他会将每一个中文拆成2个ASCII编码进行转换,这样得到的结果就是会形成4个wchar_t的字符组成的串,那么如何才能够让mbstowcs正常工作呢?在调用mbstowcs进行转换之间必须明确的告诉mbstowcs目前cstr串中包含的是chs编码的字符串,通过setlocale( LC_ALL, "chs" )函数调用来完成,需要注意的是这个函数会改变整个应用程序的字符集编码方式,必须要通过重新调用setlocale( LC_ALL, "C" )函数来还原,这样就可以保证mbstowcs在转换时将cstr中的串看作是中文串,并且转换成为2个wchar_t字符,而不是4个。 

 

本地化设置需要具备三个条件:
  1. a. 语言代码 (Language Code)
    b. 国家代码 (Country Code)
    c. 编码(Encoding)
  • 本地名字可以用下面这些部分来构造:
    语言代码_国家代码.编码 比如(zh_CN.UTF-8, en_US等)

locale的别名表见 /usr/lib/X11/locale/locale.alias(以Debian GNU/Linux为例)

setlocale语言字符串参考

Primary
language

Sublanguage

Language string
ChineseChinese"chinese"
ChineseChinese (simplified)"chinese-simplified" or "chs"
ChineseChinese (traditional)"chinese-traditional" or "cht"
CzechCzech"csy" or "czech"
DanishDanish"dan" or "danish"
DutchDutch (default)"dutch" or "nld"
DutchDutch (Belgian)"belgian", "dutch-belgian", or "nlb"
EnglishEnglish (default)"english"
EnglishEnglish (Australian)"australian", "ena", or "english-aus"
EnglishEnglish (Canadian)"canadian", "enc", or "english-can"
EnglishEnglish (New Zealand)"english-nz" or "enz"
EnglishEnglish (United Kingdom)"eng", "english-uk", or "uk"
EnglishEnglish (United States)"american", "american english", "american-english", "english-american", "english-us", "english-usa", "enu", "us", or "usa"
FinnishFinnish"fin" or "finnish"
FrenchFrench (default)"fra" or "french"
FrenchFrench (Belgian)"frb" or "french-belgian"
FrenchFrench (Canadian)"frc" or "french-canadian"
FrenchFrench (Swiss)"french-swiss" or "frs"
GermanGerman (default)"deu" or "german"
GermanGerman (Austrian)"dea" or "german-austrian"
GermanGerman (Swiss)"des", "german-swiss", or "swiss"
GreekGreek"ell" or "greek"
HungarianHungarian"hun" or "hungarian"
IcelandicIcelandic"icelandic" or "isl"
ItalianItalian (default)"ita" or "italian"
ItalianItalian (Swiss)"italian-swiss" or "its"
JapaneseJapanese"japanese" or "jpn"
KoreanKorean"kor" or "korean"
NorwegianNorwegian (default)"norwegian"
NorwegianNorwegian (Bokmal)"nor" or "norwegian-bokmal"
NorwegianNorwegian (Nynorsk)"non" or "norwegian-nynorsk"
PolishPolish"plk" or "polish"
PortuguesePortuguese (default)"portuguese" or "ptg"
PortuguesePortuguese (Brazilian)"portuguese-brazil" or "ptb"
RussianRussian (default)"rus" or "russian"
SlovakSlovak"sky" or "slovak"
SpanishSpanish (default)"esp" or "spanish"
SpanishSpanish (Mexican)"esm" or "spanish-mexican"
SpanishSpanish (Modern)"esn" or "spanish-modern"
SwedishSwedish"sve" or "swedish"
TurkishTurkish"trk" or "turkish"

 

setlocale国家字符串参考

Country/RegionCountry/Region string
Australia"aus" or "australia"
Austria"aut" or "austria"
Belgium"bel" or "belgium"
Brazil"bra" or "brazil"
Canada"can" or "canada"
China"china", "chn", "pr china", or "pr-china"
Czech Republic"cze" or "czech"
Denmark"dnk" or "denmark"
Finland"fin" or "finland"
France"fra" or "france"
Germany"deu" or "germany"
Greece"grc" or "greece"
Hong Kong SAR"hkg", "hong kong", or "hong-kong"
Hungary"hun" or "hungary"
Iceland"iceland" or "isl"
Ireland"irl" or "ireland"
Italy"ita" or "italy"
Japan"jpn" or "japan"
Korea"kor" or "korea"
Mexico"mex" or "mexico"
The Netherlands"nld", "holland", or "netherlands"
New Zealand"nzl", "new zealand", "new-zealand", or "nz"
Norway"nor" or "norway"
Poland"pol" or "poland"
Portugal"prt" or "portugal"
Russia"rus" or "russia"
Singapore"sgp" or "singapore"
Slovakia"svk" or "slovak"
Spain"esp" or "spain"
Sweden"swe" or "sweden"
Switzerland"che" or "switzerland"
Taiwan"twn" or "taiwan"
Turkey"tur" or "turkey"
United Kingdom"gbr", "britain", "england", "great britain", "uk", "united kingdom", or "united-kingdom"
United States"usa", "america", "united states", "united-states", or "us"
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值