Win32 API之Setlocale函数配置地域化信息函数

来源:互联网 发布:js 判断是否为字符串 编辑:程序博客网 时间:2024/05/01 23:11
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个。 

 

本地化设置需要具备三个条件:
    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 stringChineseChinese"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 stringAustralia"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 0
原创粉丝点击