http://blog.csdn.net/xiaobai1593/article/details/7070007
问题起因:
linux下C++采用utf-8编码方式,因此char类型不是单纯的一个字符一个字节。
一个英文字符占一个字节,而一个中文字符则不只占了一个字节(具体查看Unicode编码方案简介及实现一文)。
如下所示,分别输出中文的“王子”和其中文拼音的“wangzi”
代码:
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类型的字符串转为宽字符类型。