正确代码:
#include "stdio.h"
#include "Windows.h"
#include <locale.h>
int wmain(int argc, wchar_t* argv[])
{
setlocale(LC_ALL, "chs");
wprintf(L"%s\n", L"中文字符");
}
其关键代码为:
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 string
Chinese |
Chinese |
"chinese" |
Chinese |
Chinese (simplified) |
"chinese-simplified" or "chs" |
Chinese |
Chinese (traditional) |
"chinese-traditional" or "cht" |
Czech |
Czech |
"csy" or "czech" |
Danish |
Danish |
"dan" or "danish" |
Dutch |
Dutch (default) |
"dutch" or "nld" |
Dutch |
Dutch (Belgian) |
"belgian", "dutch-belgian", or "nlb" |
English |
English (default) |
"english" |
English |
English (Australian) |
"australian", "ena", or "english-aus" |
English |
English (Canadian) |
"canadian", "enc", or "english-can" |
English |
English (New Zealand) |
"english-nz" or "enz" |
English |
English (United Kingdom) |
"eng", "english-uk", or "uk" |
English |
English (United States) |
"american", "american english", "american-english", "english-american", "english-us", "english-usa", "enu", "us", or "usa" |
Finnish |
Finnish |
"fin" or "finnish" |
French |
French (default) |
"fra" or "french" |
French |
French (Belgian) |
"frb" or "french-belgian" |
French |
French (Canadian) |
"frc" or "french-canadian" |
French |
French (Swiss) |
"french-swiss" or "frs" |
German |
German (default) |
"deu" or "german" |
German |
German (Austrian) |
"dea" or "german-austrian" |
German |
German (Swiss) |
"des", "german-swiss", or "swiss" |
Greek |
Greek |
"ell" or "greek" |
Hungarian |
Hungarian |
"hun" or "hungarian" |
Icelandic |
Icelandic |
"icelandic" or "isl" |
Italian |
Italian (default) |
"ita" or "italian" |
Italian |
Italian (Swiss) |
"italian-swiss" or "its" |
Japanese |
Japanese |
"japanese" or "jpn" |
Korean |
Korean |
"kor" or "korean" |
Norwegian |
Norwegian (default) |
"norwegian" |
Norwegian |
Norwegian (Bokmal) |
"nor" or "norwegian-bokmal" |
Norwegian |
Norwegian (Nynorsk) |
"non" or "norwegian-nynorsk" |
Polish |
Polish |
"plk" or "polish" |
Portuguese |
Portuguese (default) |
"portuguese" or "ptg" |
Portuguese |
Portuguese (Brazilian) |
"portuguese-brazil" or "ptb" |
Russian |
Russian (default) |
"rus" or "russian" |
Slovak |
Slovak |
"sky" or "slovak" |
Spanish |
Spanish (default) |
"esp" or "spanish" |
Spanish |
Spanish (Mexican) |
"esm" or "spanish-mexican" |
Spanish |
Spanish (Modern) |
"esn" or "spanish-modern" |
Swedish |
Swedish |
"sve" or "swedish" |
Turkish |
Turkish |
"trk" or "turkish" |
setlocale国家字符串参考
Country/Region
Country/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" |
分享到:
相关推荐
中,入口函数是 main()/WinMain()和 Unicode的 wmain()/wWinmain(),DLL的入口函 数则可有可无,它是 DllMain()。驱动程序也有入口函数,而且是必须的,它是 DriverEntry(),再次提示,它是必须的,因为 I/O管理器会...
#define _tmain wmain #define _tWinMain wWinMain #else #define _tmain main #define _tWinMain WinMain #endif _T("字符串") L"字符串" _T和_L的区别在于,_L不管你是以什么方式编译,一律以...
该库提供了wgetopt()函数,它是标准Unix / POSIX getopt()函数的宽字符版本。 它适用于解析Windows特定的wmain()函数的宽字符参数。
wmain( __in int argc, __in_ecount(argc) PCWSTR argv[] ) { UNREFERENCED_PARAMETER(argc); UNREFERENCED_PARAMETER(argv); if (IsWindowsXPOrGreater()) { printf("XPOrGreater\n"); } if ...
回头见这是byenow的源代码, byenow是Windows的多线程文件夹删除实用程序。 共享该代码是为了让任何有兴趣的人都能看到该程序的工作原理。... 要阅读代码,请从wmain_app() byenow.cpp ,然后从那里开始。
自述文件 !!! 这个 repo 可以存在,因为它... g++ -o bin/Serial2Websocket S2WApp.cpp S2WMain.cpp SerialLink.cpp WebsocketLink.cpp `wx-config --cppflags` `wx-config --libs` -I <path> -L <path> -lboost_s