字符之殇——CHAR WCHAR
来源:互联网 发布:知乎首页 特效 编辑:程序博客网 时间:2024/05/04 05:39
本文阐述了使用标准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字符时一切正常,但只要字符串里带有繁体字,就会返回负数(失败)。原因如下。
0 0
- 字符之殇——CHAR WCHAR
- c++宽字符与多字节之间转换char—wchar,wchar-char
- wchar与char字符转换的探究
- WCHAR CHAR
- Char&wchar
- char wchar
- wchar <---> char
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR
- c++ 字符类型总结区别wchar_t,char,WCHAR
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- VC开发char wchar utf8 gbk字符转换
- Android中自定义checkbox样式
- oracle创建用户及分区
- Android fill_parent、wrap_content和match_parent的区别
- Js中自定义(创建)Map以及对应方法
- UISegmentedControl的所有操作总结
- 字符之殇——CHAR WCHAR
- 读书笔记-《人件》
- 《Java编程思想》学习笔记10——文件和目录常用操作
- 黑马程序员-java之反射
- Openstack: python API “how to download image from glance using the python api”
- 终于找回了博客账号,眨眼间却是一年半了
- 【TABLESPACE】创建非标准块大小(标准块8K)表空间
- 商业分析能力是怎样炼成的?
- Android 布局优化