VS2010中wmain入口函数中使用wprintf输出中文乱码问题
来源:互联网 发布:cf淘宝 编辑:程序博客网 时间:2024/05/20 07:35
正确代码:
#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 | 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/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"
0 0
- VS2010中wmain入口函数中使用wprintf输出中文乱码问题
- 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
- 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
- wprintf函数 输出中文
- 使用wprintf输出中文
- wprintf 中使用%I64d格式化输出LONGLONG
- wprintf 中使用%I64d格式化输出LONGLONG
- wprintf 输出中文的问题
- cout,wcout,printf,wprintf等函数的中文输出问题
- vs2010 中cocos2d-x 中文 乱码问题
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- ReadFile,WriteFile,wprintf 中文乱码问题
- 控制台程序的中文输出乱码问题,printf,wprintf与setlocale
- 控制台程序的中文输出乱码问题,printf,wprintf与setlocale
- 关于QT5.4+VS2010\VS2013使用过程中,中文乱码的问题
- wprintf输出中文
- wprintf输出中文
- Opencv学习笔记:(2)在VS2012中配置Opencv2.4.9项目
- java猜拳游戏
- Linux chmod命令修改文件与文件夹权限方法
- 第二十五讲 Web Service开发
- netstat命令详细说明
- VS2010中wmain入口函数中使用wprintf输出中文乱码问题
- zTree实现删除树节点
- 第12周总结
- 用javascript修改html元素的class
- mysql格式化日期和时间
- 2 Xcode5(4)
- 第二十六讲 ASP.NET身份验证(一)
- 资源文件夹res的简介
- js 页面刷新location.reload和location.replace的区别小结