Linux下char类型可能带来的问题
来源:互联网 发布:什么是4g网络 编辑:程序博客网 时间:2024/05/19 02:17
http://blog.csdn.net/xiaobai1593/article/details/7070007
问题起因:
linux下C++采用utf-8编码方式,因此char类型不是单纯的一个字符一个字节。
一个英文字符占一个字节,而一个中文字符则不只占了一个字节(具体查看Unicode编码方案简介及实现一文)。
如下所示,分别输出中文的“王子”和其中文拼音的“wangzi”
代码:
- <span style="font-family:'Microsoft YaHei';font-size:12px;"> char name[16]={0};
- strcpy(name, "WangZi");
- //strcpy(name, "王子");</span>
print name
$1 = "WangZi\000\000\000\000\000\000\000\000\000"
易知,一个英文字符占了一个byte(别忘了加上终止符)
print name
$1 = "王子\000\000\000\000\000\000\000\000\000"
可见,一个中文字符占用了3个byte
原因:
在Linux系统中,默认使用的是:Utf-8编码方式
(Utf-8是Unicode编码方式的一种实现,属于变长编码)
可能带来的问题1:
当字符串中含有中文,linux下printf()可以正常输出显示。但是,这样的char数组,传递个windows的程序(如wine上运行的程序)使用时,会出现乱码现象。因此,需要把它们转化为wchar_t类型。
我们在linux下使用mbstowcs()函数来将char类型转换wchar_t类型,然后再将wchar_t传递出去;
问题2:
在windows程序上得到的却是每个字节后面都有一个0值。
原因在于:linux下GCC规定的wchar_t是32bit(即4字节),而windows VC中的wchar_t占用16bit(即2字节)。
使用MultiByteToWideChar()(Windows下的函数)可以将传递的char字符串(w0a0n0g0z0i0)成功转为两字节的wchar_t
具指点是说linux下char字符串使用utf-8编码,所以使用上面将char类型的字符串转为宽字符类型。
- Linux下char类型可能带来的问题
- Linux下char类型可能带来的问题
- Linux下char类型可能带来的问题
- 在外键末加索引的情况下,可能带来的问题
- tomcat7可能带来的问题
- tomcat7可能带来的问题
- tomcat7可能带来的问题
- 小心char类型带来的麻烦
- android屏幕旋转可能带来的问题
- 扩展类型带来的问题
- 类型转换带来的问题
- 类型转换带来的问题
- HttpModule在IIS7集成模式下静态资源请求可能带来的问题
- Linux下jstring与char字符串类型之间的转换
- 改正 抢占式camera的可能带来死锁问题
- 浅析Context及可能带来的内存泄漏问题
- 浅析Context及可能带来的内存泄漏问题
- 字节对齐详解,及可能带来的问题
- live555 H264及sps和pps
- Ogre实现不同动画之间的混合
- MyEclipse 10 + Maven2 + Tomcat6 开发环境
- ofstream和ifstream详细用法
- ndk开发之利用android系统中.so库文件(例:libsqlite.so)
- Linux下char类型可能带来的问题
- 在Eclipse中创建java类的注释模板
- 安装adt
- makefile详解(08) 包含内容
- Microsoft web broswer不支持此接口
- hadoop streaming常用配置项
- subclipse下svn: E200015: authentication cancelled问题的解决
- expdp kill_job
- Evil beyond imagining