lgy514

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。
也就是说,默认locale是C,字符集是ascii

当我们的输入是一组带有中文或者其他字符的字符串时候,他就会截断。只会转化前面的ascii字符。

如果我们存在中文路径,或者字符,想使用wcstombs该函数来将宽字符串转为多字节字符串,那么我们就得设置系统的当前环境的locale.
主要是使用setlocale这个函数以及两个标记 LC_CTYPE, LC_ALL.

法1:

char* old_locale = _strdup(setlocale(LC_CTYPE,NULL)); //store the old locale

setlocale(LC_CTYPE,setlocale(LC_ALL,"")); //using the locale of the user env.

wcstombs(...)

 setlocale(LC_CTYPE, old_locale); //restore the old locale.

free(old_locale);

法2:

setlocale(LC_ALL,"");     //设置本地默认Locale

wcstombs(...)

setlocale(LC_ALL,"C");     //默认

头文件:

c: <stdlib.h>

c++:<cwchar>

posted on 2020-06-30 17:53  lgy514  阅读(301)  评论(0编辑  收藏  举报