函数setlocale()的介绍与单字符宽字符的互相转换

本文深入探讨了PHP中的setlocale()函数及其用途,详细介绍了如何配置地域信息,以及如何进行单字符与宽字符之间的转换。通过实例演示了不同场景下函数的应用,包括设置地区环境、字符串比较、字符类型转换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数: 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函数,别搞混了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值