函数: setlocale()
语法:string setlocale(string category, string locale);
用法说明:
本函数用来配置地域的信息。参数 category 有下列的选择:
- LC_ALL 包括下面的全项选项都要。
- LC_COLLATE 配置字符串比较,PHP 目前尚未实作出来本项。
- LC_CTYPE 配置字符类别及转换。例如全变大写strtoupper()。
- LC_MONETARY 配置金融货币,PHP 目前尚未实作。
- LC_NUMERIC 配置小数点后的位数。
- LC_TIME 配置时间日期格式,与strftime()合用。
而参数 locate 若是空字符串 "",则会使用系统环境变量的 locate 或是 LANG 的值。若 locate 为零,则不会改变地域化配置。返回新的地域,若系统尚未实作则返回 false。
接下来是单字符宽字符的互相转换
首先要介绍要转换的两个函数:
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n); //转换单字符串为宽字符串
size_t wcstombs(char *mbstr,
const wchar_t *wcstr,
size_t count );//转换宽字符串为单字符串
例如:
CString str = L"hello";
char sss[20];
wcstombs(sss,str.GetBuffer(),20);
//转换宽字符为单字符
stl 宽字符到 单字符转换
wstring
str = L"Hello";
std::wstring::size_type len = str.length();
std::string s(len*2,0);
size_t total = wcstombs(&s[0],str.c_str(),len*2);
s[total] = ''''\0''
return s;
mbtowc 和 wctomb 是单个字符相互转换
int len;
setlocale (LC_ALL, "chs");
//设置为简体中文环境
wchar_t wc = L''''中''
wprintf(L"1个宽中文字符:%c \n",wc);
char* p = "中";
len = mbtowc (&wc, p, MB_LEN_MAX);
wprintf(L"单字符串转换为1个宽字符:%c 长度: %d\n",wc,len);
char pcmb[MB_LEN_MAX];
len = wctomb (pcmb, wc);
pcmb[len] = 0;
printf("宽字符转换为单字符串:%s 长度:%d\n",pcmb,len);
BYTE
utf8[1024];
//utf8 字符串
wchar_t wstr[1024];
char mstr[1024];
//UTF-8 转换为宽字符
MultiByteToWideChar( CP_UTF8, 0, utf8,1024, wstr,
sizeof(wstr)/sizeof(wstr[0]) );
WideCharToMultiByte( CP_ACP,0,wstr,-1,mstr,1024,NULL,NULL );
注:mbstowcs()是C库函数,要正确的设置Locale才能进行转换,MultiByteToWideChar()是win32函数,别搞混了!