==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍
在locale.h头文件中有个setlocale函数,它的作用是设置运行时的字符集环境。一般C/C++编译器默认字符集环境为"C",所以你要正常输出单个中文字符,或者用mbstowcs、wcstombs等C库函数的时候,需要设置字符集环境为中文。
setlocale函数的原型如下:
char *setlocale(
int category,
const char *locale
);
第一个参数MSDN是这样描述的:
The category argument specifies the parts of a program’s locale information that are affected。
大意是,这个参数指定哪一部分受你给定的语言环境所影响。具体的category请参考MSDN。
第二个参数就是你所指定的语言环境。
一般中文的有如下设置:
“chinese”
“chinese-simplified” or “chs”
“chinese-traditional” or “cht”
例子1:
输出单个中文字符
setlocale(LC_ALL, "chs");
wprintf(L"%c", L'你');
例子2:
窄字符转换为宽字符
mbstowcs函数原型如下:
size_t mbstowcs(
wchar_t *wcstr,
const char *mbstr,
size_t count
);
第一个参数是wchar_t[]的宽字符串缓冲区,转换后,结果保存在里面。
第二个参数是需要转换的char[]字符串
第三个转换的最大字节数,一般填上wchar_t[]数组的大小即可
转换单个字符
setlocale(LC_ALL, "chs");
wchar_t w = 0;
char c[3] = "你";
mbstowcs(&w, c, 1);
例子3:
宽字符转换为窄字符
wcstombs函数原型如下:
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
第一个参数是char[]的宽字符串缓冲区,转换后,结果保存在里面。
第二个参数是需要转换的wchar_t[]字符串
第三个转换的最大字节数,一般填上char[]数组的大小即可
转换单个字符
setlocale(LC_ALL, "chs");
wchar_t w = L'你';
char c[3] = "";
wcstombs(c, &w, 3);
printf("%c%c\n", c[0], c[1]);