ANSI编码和Linux下的mbtowc
来源:互联网 发布:dlg数据 编辑:程序博客网 时间:2024/06/18 13:49
原文地址:http://blog.sina.com.cn/s/blog_4723adba0100hnb4.html
本文阐述了在linux下使用标准C库函数mbtowc进行多字节和宽字节转化的方法,以及一些诡异的转化错误的产生原因及解决方法。
一、ANSI编码简述
“ANSI编码”不同于ANSI(American National Standards Institute,美国国家标准协会)。ANSI编码是个编码族,是各国(或地区)基于US-ASCII扩展而成的一套用连续两个或更多字节表达一个该国(或地区)特有字符的编码。
“觼”的Unicode(Big Endian)是0x89FC
二、mbtowc函数的使用
或许有人要说,在linux下有iconv函数,在windows下有MultiByteToWideByte。但对跨平台开发有某种执着的C/C++程序员肯定不喜欢大量的ifdef-endif,而喜欢用标准C库函数——这些函数虽然在Windows下和Linux下的实现可能稍有不同,但参数和功能总是一致的。
在服务器开发时,如果客户机传送的是ANSI编码,则需要确定是哪一种ANSI编码。
通知程序确定当前的多字节字符到底是什么ANSI编码,使用的方法是在mbtowc前调用setlocale,该函数用于调整当前环境变量——虽然环境变量很多,但一般都是同一转换比较方便。即setlocale(LC_ALL, "编码名")。
三、mbtowc的诡异bug的原因及解决方法
有时候,mbtowc函数会出现某种奇怪现象:输入字符串只有简体字和ASCII字符时一切正常,但只要字符串里带有繁体字,就会返回负数(失败)。原因如下。
因此,在PC上开发程序时,如果是中文世界的程序,在mbtowc前使用setlocale(LC_ALL, "zh_CN.GB18030")即可。
参考链接:http://blog.csdn.net/ldanduo/article/details/8203532
- ANSI编码和Linux下的mbtowc
- ANSI编码和Unicode编码的不同
- ANSI编码和Unicode编码的不同
- ANSI编码和Unicode编码的不同
- ANSI编码和Unicode编码的不同
- 字符编码ANSI和Unicode的比较
- windows下字符编码: UTF8 和 ANSI 的区别分析和转换
- ANSI和unicode编码
- Unicode和ANSI编码环境下编译字符串的问题求解
- unicode编码和ansi编码
- Unicode编码和ANSI编码
- Mac下ansi和unicode的转换
- _T("")宏的由来和ANSI和UNICODE编码
- 字符集编码ANSI和UNICODE
- 字符集编码ANSI和UNICODE
- ANSI和UTF-8文本编码的体积比较
- VS中遇到的 UNICODE和ANSI 编码问题
- python读取Unicode和ANSI编码的文件
- Unity总结
- LeetCode OJ 之 Combination Sum (“连接”和)
- Ubuntu linux nginx + uwsgi + django 配置
- eyetribe_Basics
- Windows7下dos 查看和配置变量命令
- ANSI编码和Linux下的mbtowc
- springMVC 与jsr 303 结合后端验证问题
- 1028:行车路程
- 几个集合类的区别
- Unity学习之小结
- 写一个函数返回参数值为1的个数
- 解读比特币官方钱包加解密
- 求100-200之间的素数
- teamviewer vpn+xp vpn服务实现在家访问公司内部局域网