【BUG挖掘】win系统WideCharToMultiByte和MultiByteToWideChar
来源:互联网 发布:cad 布局 知乎 编辑:程序博客网 时间:2024/06/14 00:20
BUG点:WideCharToMultiByte和MultiByteToWideChar大部分情况转换是没问题的,但API遇到特定字符序列时,转换后丢失数据,出现乱码,此种乱码并不是编码不支持某字符,而是特定序列会出问题,下图是将正常字符串转换为服务器需要的字符串后,再转换回来,出现乱码。
起因:最近一个朋友写vb的FTP读写,服务器返回的文件目录编码不是普通的Unicode也不是ANSI,而是将UTF-8编码的字符串,强行以ANSI格式转换为Unicode,所以显出时需要一个转换过程:目标字符串→以ANSI方式转换为多字节字符集(转换后的结果是UTF-8编码)→按照UTF-8格式转换为Unicode。
发此文章并不是求乱码的其它解决方案,百度贴吧我也发一帖,而是无意间发现这俩函数在转换字符上有bug,我这测试程序的转换过程就是A→B→A的形式,别问我为什么要折腾转换一个来回,只是测试而已。网上千篇一律的那些什么文章“最后一字符乱码”,说缓冲区长度没传对导致乱码的问题,这不是长度不够,而是特定字符序列乱码。如果函数有其它参数上的传递问题,可以指点指点。
因为函数调用用的我自己写的tlb类型库,没用declare声明,所以参参传递上有byval 0,这只是需要给指针参数传个NULL而已,没有tlb的用declare声明也行
最开始,Unicode转多字节集是用的内置函数strconv,多字节集转目标字符串是用的API,后来全部换API也一样有问题
测试条件是vb,但这bug换到vc里同样有
阅读全文
0 0
- 【BUG挖掘】win系统WideCharToMultiByte和MultiByteToWideChar
- MultiByteToWideChar和WideCharToMultiByte用法
- MultiByteToWideChar和WideCharToMultiByte用法
- MultiByteToWideChar和WideCharToMultiByte用法
- MultiByteToWideChar 和 WideCharToMultiByte
- WideCharToMultiByte和MultiByteToWideChar函数
- MultiByteToWideChar和WideCharToMultiByte用法
- MultiByteToWideChar和WideCharToMultiByte用法
- WideCharToMultiByte 和 MultiByteToWideChar 详解
- WideCharToMultiByte和MultiByteToWideChar函数
- WideCharToMultiByte和MultiByteToWideChar
- MultiByteToWideChar和WideCharToMultiByte
- WIDECHARTOMULTIBYTE和MULTIBYTETOWIDECHAR函数
- MultiByteToWideChar和WideCharToMultiByte
- MultiByteToWideChar和WideCharToMultiByte
- MultiByteToWideChar和WideCharToMultiByte用法详解
- MultiByteToWideChar和WideCharToMultiByte用法详解
- MultiByteToWideChar和WideCharToMultiByte用法详解
- 5.2.从键盘任意输出一个整数,编程判断它的奇偶性。
- Linux下的ssh免密登录原理
- 网站卡顿,JS代码该优化了
- 【Lucene】使用反射技术优化Lucene索引库的查询与创建
- python 一些包的安裝
- 【BUG挖掘】win系统WideCharToMultiByte和MultiByteToWideChar
- hibernate缓存以及优化常识
- sdut 1028 Catch That Cow( BFS)
- SpringMVC和Struts2的区别
- 简单说 JavaScript的箭头函数
- 习题4.1(1)
- Eclipse常用快捷键
- TensorFlow的convert_variables_to_constants函数
- 从1~n的平方、立方根的应算