setlocale同mbstowcs函数的关系(VS2008下setlocale(LC_ALL, "chs")可以执行成功,BCB使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China"),linux上locale别名表大概在 /usr/lib/X11/locale/locale.alias)
序中,如果要将ASCII码字符串转换为宽字符(Unicode),可以利用标准C的mbstowcs函数。
微软在MSDN中有示例,如下:
然而,这段代码在处理含有汉字的字符串时就会出现问题。比如将:
wchar_t *pwchello = L"Hi"; 替换为wchar_t *pwchello = L"你好";
查看运行结果就会发现,mbstowcs函数将汉字视作两个ASCII字符,这样一个汉字就变成了两个wchar_t。原因是mbstowcs需要我们明确的告诉他要转换的字符语言。这里需要使用setlocale函数。在网上发现不少人遇到这个问题,微软的MSDN也是,为什么这里就不说明一下呢?
只要在调用前,使用setlocale(LC_ALL, "chs")设置,结果就正常了。
我测试在英文Vista操作系统内,Visual Studio 2008下setlocale(LC_ALL, "chs")可以执行成功。
但是在Borland C++Builder 6、CodeGear RAD Studio 2009下执行都失败,BCB提供的帮助文件内也未找到,反复测试使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China")可以奏效(这么大一个长串,BCB对搞中文编码的程序员也够狠)。
更讽刺的是,在BCB内使用setlocale(LC_ALL, "jpn"),或"cht"都可以成功。唯独就不支持"chs",对BCB的做法彻底无语了。我相信在大多数unix或linux上也还是支持"chs"的。如果有时间,我再搞一个MinGW试试看。
另外如果程序运行在非中文操作系统内,使用setlocale修改运行时字符集环境,会影响当前应用程序的编码方式,因此使用前需要保留一下老的编码,使用后再恢复。
for 在linux上coding的兄弟们,locale别名表大概在 /usr/lib/X11/locale/locale.alias
http://www.cppblog.com/fwxjj/archive/2010/05/25/116303.html
相关文章
- pycharm运行正常,cmd和linux执行异常提示找不到包
- linux学习-Linux系统启动过程
- lsof linux
- Linux下进程信息/proc/pid/status的深入分析
- linux下使用grep在当前目录下搜索所有文件中含有的字符串
- Linux 安装基于(PHP5.5)memcache扩展
- Linux - 标准输入标准输出,重定向
- LINUX——shell脚本编程
- 【Linux】手把手教你如何搭建linux环境---云服务器
- Rust之linux for windows 交叉编译gtk-rs
- Linux 内核提交 urb
- Django实现Linux服务端快速清理缓存
- 关于linux中命令 sh -c 的必要性
- Linux下web目录权限设置
- Linux 执行脚本时 source 和 . 和 sh 和 ./ 的区别
- Linux概述
- linux中的dd复制命令
- Linux用netstat查看服务及监听端口
- php执行linux命令的6个函数
- python:windows链接linux执行命令并获取执行状态
- Linux架构之简述企业网站简述
- Linux 文件的读写执行权限的说明
- linux c获取mac
- [加入用户]解决useradd 用户后没有加入用户Home文件夹的情况,Linux改变文件或文件夹的訪问权限命令,linux改动用户password,usermod的ysuum安装包。飞
- Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理
- Linux学习笔记(7)CRT实现windows与linux的文件上传下载
- Linux学习笔记(3)linux服务管理与启停(开机自启与自定义服务)
- linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序
- linux如何查看当前目录的完整路径
- 【Linux】linux下用python获取底层硬件信息接口
- Linux - Devicetree规范: 中断和中断映射
- Linux下的crontab定时执行任务命令详解