正确代码:
#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 Function)是每个C++程序的入口点,它标志着程序执行的开始。在标准C++中,主函数通常被声明为`int main()`,但有时候,我们可能需要主函数接收参数,这在特定场景下非常有用。本教程将...
这里将环境变量指针、命令行参数指针以及参数个数压入栈中,然后通过`call`指令调用`_wmain`函数。类似地,对于`_main`和`_wWinMain`也有相应的参数传递逻辑。 #### 返回值处理 当`main`或`WinMain`函数执行完毕后...
一个RTSS程序可以使用wmain()函数,并接受宽字节输入参数。对WCS家族函数的支持作为RTX支持的C 运行时库的一部分引入进来。 RTX官方文档中文翻译提供了RTX基本特点、进程线程、中断、架构、内存管理、API等方面的...
控制台程序的入口函数通常是 `main`,其原型可以根据不同的语言标准有所不同: - **C 语言标准**: ```c void main(int argc, char *argv[], char *envp[]); int main(int argc, char *argv[], char *envp[]); `...
此外,`wmain`函数中使用了`shapes::const_iterator`,应改为`shapes.begin()`,因为`shapes`是范围内的作用域解析运算符,不是命名空间。 5. **STL应用与问题** 使用`std::vector`时,需要注意迭代器失效的问题。...
### VS MAP 文件使用详解 #### 一、引言 在软件开发过程中,程序崩溃是常见的问题之一,尤其在复杂的多线程环境中,定位崩溃的原因往往非常困难。Microsoft Visual Studio (以下简称VS) 提供了多种工具和技术来...
在项目属性中,设置调试入口为`privilege::debug`,调试属性的命令参数设置为`wmain()`,这是Mimikatz的主入口函数。 当调试运行时,Mimikatz接收到命令后,会进入命令分发的过程。核心函数`mimikatz_...
- **宏定义**:避免定义过于复杂的宏,尽可能使用内联函数代替。 ##### 3.3 线程安全规范 - **互斥量**:使用ACE提供的互斥量机制(如`ACE_Thread_Mutex`)来保护共享资源。 - **锁**:确保对临界区的访问是原子...
Windbg还支持源代码级别的调试,通过File→Open菜单打开源代码文件,可以看到代码与调试信息的结合视图,左边是源代码,右边是Windbg的输入和输出窗口,方便你进行代码分析和问题定位。 通过这个简单的例子,你已经...
在某些情况下,程序可能会有特定的启动函数,例如`main`或`wmain`(Unicode版本)。这些函数是在`WinMain`调用后,由运行时库根据程序类型调用的。例如,控制台程序通常使用`main`作为入口点,而非Windows GUI程序。...
`wmain()`函数作为Mimikatz的入口点,接收并处理命令行参数。 在命令处理阶段,Mimikatz通过`mimikatz_dispatchCommand()`函数进行命令分发。该函数首先调用`kull_m_file_fullPath`方法,但其具体作用在当前上下...
- `wmain`函数作为程序的入口点,检查命令行参数并调用`getstring`函数。 2. **编译配置**: - 在编译程序时,通过设置项目属性中的“Buffer Security Check”选项启用栈保护机制。这可以通过项目的配置属性页面...
此外,`_tmain()` 和 `wmain()` 是微软特有的函数入口点,而 `main()` 是符合 ISO/ANSI C++ 标准的可移植性更好的选择。 第二章深入探讨了数据、变量和计算。变量的命名应遵循一定的规则,可以包含字母、数字和...
#define _tmain wmain #define _tWinMain wWinMain #else #define _tmain main #define _tWinMain WinMain #endif _T("字符串") L"字符串" _T和_L的区别在于,_L不管你是以什么方式编译,一律以...
在本文中,我们将深入探讨如何使用C++编程语言来创建Windows服务程序。Windows服务是一种在后台运行的应用程序,它们不依赖于用户界面,并且通常在系统启动时自动启动。这样的特性使得服务程序非常适合用于需要长期...
在Win32 DLL中单独使用MFC也非常简单,可以通过构造项目的`DllMain`函数实现: 1. **包含必要的头文件**:例如`afxdllx.h`。 2. **定义`AFX_EXTENSION_MODULE`**:这有助于管理DLL中的MFC扩展模块。 3. **构造`...
本篇文章将深入探讨“libwgetopt”这个开源库,特别是它的核心功能——wgetopt()函数,这是一个针对宽字符的getopt()函数实现,特别适合处理Windows环境下wmain()函数中的宽字符参数。 getopt()函数是Unix和POSIX...
2. `WMain.cpp`:这可能包含主窗口或应用程序的主要控制逻辑,通常有`WinMain`函数,是程序的入口点。 3. `sniffer.cpp`:此文件很可能包含了嗅探器的主要功能实现,如创建Raw Socket,监听网络流量,解析和显示...
在编程领域,尤其是在Windows平台下的开发中,Visual C++(简称VC++)是一个常用的集成开发环境,用于创建C++应用程序。在使用VC++编写程序时,有时我们需要获取命令行参数来实现特定的功能或控制程序的行为。命令行...
在VC++中,我们可以使用`main()`函数的参数来访问这些命令行参数。`main()`函数有两个标准形式: ```cpp int main(int argc, char* argv[]) ``` 或者,对于宽字符支持: ```cpp int wmain(int argc, wchar_t* ...