您的位置:首页 > 运维架构

多字节与宽字符之间的转换问题

2014-07-01 16:14 447 查看
最近在做openssl相关的产品开发。其中遇到取cer证书中用户信息这块,因为用户信息可能是汉字,如用户名、公司名地址等。牵扯到多字节与宽字符Unicode的问题。这些信息在直接取的时候,可能会出现乱码。所以在取的时候,需要做一些操作。

在windows下有两个函数可以进行多字节 <-> 宽字符之间的转换:

MultiByteToWideChar()   和  WideCharToMultiByte(),具体用法百度一下就可得到。

但是在linux下是没有这对函数的。所以需要另一对函数:

size_t mbstowcs(wchar_t *dest, const char *src, size_t n);

  和

size_t wcstombs(char *dest, const wchar_t *src, size_t n);

用法百度依然可以得到。

这里需要指出的有两点:

   1 wchar_t可以用short来替代。如定义一个short数组:

short  dest[100]; 就可以拿来用了。当然传参时,别忘了强转一下(wchar_t*) dest 。

   2 mbstowcs的第三个参数n, 表示的是dest数组的大小。此大小至少是src中的实际有效数据的两倍。为啥?看下图:



            最后。不同于在windows下使用MultiByteToWideChar()/WideCharToMultiByte(),linux下这两个函数会受locale的影响。所以,在调用它们之前,最好设置一下:

setlocale(LC_ALL,"zh_CN.UTF-8");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐