从MS的源代码中分析出来了我的Bug
2006-10-24 15:55
218 查看
近日写一个银行的接口程序,是通过HTTP通讯的。
我开始选择了System.Net.WebClient的UploadValues来实现,后来发现银行那边用的编码是GB2312,而WebClient似乎是不能指定编码的(.Net1.1和.2.0似乎都是这样),所以通讯是字母和数字的话没有问题,如果通讯是中文的话就出现乱码,导致银行验证数字证书的时候出错。
走头无路的时候发现.Net2.0还有更低级的HTTP通讯类:WebResponse和WebRequest,所以用这两个类来实现我的目的。结果让我很失望,竟然数字和字母也不能正确发送了。没办法,我自己做了一个调试页面,其实就是把一个空页面设置成<%@ Page ... Trace="true"%>,让我的接口发送数据到这个空页面上,这样可以方便的看到每个Get和Post的字段。
这个时候看到中文是正常的(也就是说我发送和接受的数据是一致的),英文和数字也都正常,但是“+”传递过程中变成了空格。
为了这个问题郁闷了很久也没有解决,这时我突然想起来既然WebResponse和WebRequest比WebClient更低级,那么WebResponse会不会是用WebResponse和HttpWebRequest来实现的呢?
我找来.Net Reflector查看.Net的System.Net.WebClient.UploadValues()源代码如下:
1public byte[] UploadValues(string address, string method, NameValueCollection data)
2string text4 = text2 + WebClient.UrlEncode(text3) + "=" + WebClient.UrlEncode(data[text3]);
我没有用UrlEncode编码 所以导致加号不能正常传输,所以问题解决。
另外我想我也找到了为什么System.Net.WebClient.UploadValues()不能指定编码
很可能跟这个语句有关系
StreamWriter writer1 = new StreamWriter(stream1, Encoding.ASCII)
微软在代码里边把编码写死了,这个算不算MS的Bug呢?
我开始选择了System.Net.WebClient的UploadValues来实现,后来发现银行那边用的编码是GB2312,而WebClient似乎是不能指定编码的(.Net1.1和.2.0似乎都是这样),所以通讯是字母和数字的话没有问题,如果通讯是中文的话就出现乱码,导致银行验证数字证书的时候出错。
走头无路的时候发现.Net2.0还有更低级的HTTP通讯类:WebResponse和WebRequest,所以用这两个类来实现我的目的。结果让我很失望,竟然数字和字母也不能正确发送了。没办法,我自己做了一个调试页面,其实就是把一个空页面设置成<%@ Page ... Trace="true"%>,让我的接口发送数据到这个空页面上,这样可以方便的看到每个Get和Post的字段。
这个时候看到中文是正常的(也就是说我发送和接受的数据是一致的),英文和数字也都正常,但是“+”传递过程中变成了空格。
为了这个问题郁闷了很久也没有解决,这时我突然想起来既然WebResponse和WebRequest比WebClient更低级,那么WebResponse会不会是用WebResponse和HttpWebRequest来实现的呢?
我找来.Net Reflector查看.Net的System.Net.WebClient.UploadValues()源代码如下:
1public byte[] UploadValues(string address, string method, NameValueCollection data)
2string text4 = text2 + WebClient.UrlEncode(text3) + "=" + WebClient.UrlEncode(data[text3]);
我没有用UrlEncode编码 所以导致加号不能正常传输,所以问题解决。
另外我想我也找到了为什么System.Net.WebClient.UploadValues()不能指定编码
很可能跟这个语句有关系
StreamWriter writer1 = new StreamWriter(stream1, Encoding.ASCII)
微软在代码里边把编码写死了,这个算不算MS的Bug呢?
相关文章推荐
- opencv纹理分析-GLCM 源代码bug修复
- linux 3.4.10 内核内存管理源代码分析1:源代码阅读工具,编译及调试
- 通话bug分析-视频通话花瓶
- asp.net 开发商城的源代码分析
- Fruit Ninja(水果忍者)游戏源代码下载、分析(下)---可运行Android,Ios,Window,Mac,Html5平台
- 由AFX_IDW_PANE_FIRST宏的含义分析界面库XTP的一个bug
- Zend Framework分析总结(没经验写不出来)
- Cocos2d-x 源代码分析 : Scheduler(定时器) 源代码分析
- MyBatis架构设计及源代码分析系列(一):MyBatis架构
- Android5.0 Camera HAL3 源代码分析
- MS SQL Server数据库事务锁机制分析
- 系统分析—建议(7省BUG分析二)
- GDB调试器源代码分析系列--Inferior call的实现与分析(1)
- Larbin[1]hashtable checker 源代码分析
- Android surfaceflinger 源代码分析
- PVFS2 源代码分析之用户系统接口src/client/sysin/sys-get-eattr.c状态机代码
- x264源代码分析
- Android系统默认Home应用程序(Launcher)的启动过程源代码分析
- 声波通信(声波传输)在iOS、Android中的应用场景深入分析(含部分声波通信源代码)
- Iperf 源代码分析(七)