asp.net 中数据传递时为何进行编码以及乱码错误

今天在做一个绕过前台页面,直接向对方服务器post数据请求的模块。照例是先在对方网站上发一个真实的post请求,,利用抓包工具获取post请求以及网站相应的数据。可抓包工具捕捉到的数据竟是编码之后的数据。截图如下所示:

接下来思路就是我能不能不把数据进行编码,直接进行post。测试显示,数据确实是post到了对方的网站上,不过显示的却是乱码。此方法行不通。

第一种方法不行,可也验证了除post数据之外的东西都没错。接下来就是按照对方网站post数据的格式进行模拟:需要进行数据的编码。微软为我们封装了一个进行编码的类HttpUtility。在该类下微软为我们封装了几种编码格式,在此采用url、utf-8编码格式。在System.Web命名空间下。添加命名空间,并进行数据的编码。代码如下。

测试结果:报了500错误

出现500错误有两种情况:

1、对方服务器维护中,不可访问

2、post的数据格式有无

第一种情况排除,现在看来还是数据格式不正确。

在对方网站上模拟真实的请求,数据还是上面的数据,但是对方网站经过编码之后post的数据为%u4E09%u5BA4%u4E00%u5385%uFF0C%u5404%u9879%u8BBE%u65BD%u9F50%u5168

利用编码、解码工具进行上述数据的编、解码。如下所示:

采用utf-8编码

采用gb2312编码格式

上面经过编码后的数据和对方网站上的数据都不一样。上面我们采用的url编码。看来这种编码格式不行,微软我们提供了另外的几种,由于不知道网站上采用的是哪一种,再加上本人技术有限,只用采用比较笨的一种方法:一个一个试。

string title = HttpUtility.UrlEncode("三室一厅,各项设施齐全");string title1 = HttpUtility.UrlEncode("三室一厅,各项设施齐全",System.Text.Encoding.UTF7);string title2 = HttpUtility.UrlEncode("三室一厅,各项设施齐全", System.Text.UTF32Encoding.UTF32);string title3 = HttpUtility.UrlEncode("三室一厅,各项设施齐全", System.Text.UTF7Encoding.UTF7);string title4 = HttpUtility.UrlEncode("三室一厅,各项设施齐全", System.Text.UTF8Encoding.UTF8);string type=HttpUtility.UrlEncodeUnicode("三室一厅,各项设施齐全");运行项目,单步调试,看看那种编码格式后的数据与对方网站采用的编码格式一致。经过验证发现只有最后一种编码方式可以得到正确结果。那最后一种编码方式又是什么呢?

Unicode是Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案

思考:网站上post的数据为何要进行编码?

在讲为何进行编码之前,我们首先回顾一下http请求的过程

第一步:浏览器把数据经过编码送给服务器;

第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给浏览器

第三步:浏览器按照指定的编码显示网页

数据在浏览器与服务器之间传递时都是以二进制的形式进行的,要想进行数据的传递必须将数据先转换为二进制数据。而在客户端,与二进制数据进行转换的数据格式是ASCII数据。为此,我们需要在客户端把数据都转换为ASCII数据格式。数据转换为ASCII格式后,浏览器再通过iso-8859-1编码方式将ASCII数据转换为二进制数据,随着请求头一起发送到服务器到了服务器之后,服务器会先用iso-8859-1进行解码,这样服务器获取的数据都是ASCII范围内的请求头字符。之后会对数据进行处理,并把返回的数据继续编码返回给浏览器。

网页出现乱码笼统的说就是传递的数据出现了汉字以及其他非ASCII字符,解决方法就是进行数据格式的转换。在此就不再讲述,具体解决方法可参考下面的文章。

参考:

https://msdn.microsoft.com/zh-cn/library/System.Web.HttpUtility(v=vs.110).aspx

正确的寒暄必须在短短一句话中明显地表露出你对他的关怀。

asp.net 中数据传递时为何进行编码以及乱码错误

相关文章:

你感兴趣的文章:

标签云: