700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

时间:2022-12-05 05:12:38

相关推荐

java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

URL中包含中文参数造成乱码的解决方法

更新时间:03月08日 21:44:27 作者:

中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码方式可能会有点不适应,本篇文章并不讲述这些编码,而是把自己遇到的一个小问题以及该问题的解决之法说明一下,希望对大家有用。

问题:

前段时间,在系统中做了一个类似于友情链接的功能块,一直运行良好,直到有一天加了类似于以下的链接地址:http://www.****.com/user.aspx?id=水天,就出现大问题了:

1、从IE地址栏中直接输入这个地址,访问没错;

2、做一个静态页,其中包括这个超链接,点击访问也没错;

3、就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码。

一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是"http://www.****.com/user.aspx?id=水天",但真正传递过去的参数"水天"其实已经经过类似于Server.UrlEncode的操作了,当然默认是utf-8编码,正是由于这个原因,如果对方系统不进行相应的解码,直接操作该参数,就产生了以上的错误。

解决方法:

网上有很多解决之道,最常见的莫过于以下几点:

1、在web.config里配制,这个方法确实可行,但我想很多人不想用这种方法来解决,把整个项目的请求和回应都定为gb2312,我觉得不是一个好办法,有点本末倒置了,毕竟这会导致很多其它问题的出现。

2、把要包含该链接的aspx文档,修改其charset属性为gb2312。这个方法到也可以接受,不过对于该文中的问题还不是最好的方法,因为该功能块是可以动态添加到任何页面的,难道要去修改所有的页面?想想还是不太合适。

3、直接用Server.UrlEncode和Server.Decode进行加码和解码操作,这种方法对于发送方和接收方都在一个项目中是可行的,现在的问题是,我们要随意去访问别人的系统,所以只能弃用此方法了。

4、采用HttpUtility.UrlEncode(query, System.Text.Encoding.GetEncoding("GB2312"));对链接中的参数值进行gb2312的编码,这种方法,对方不用进行任何解码操作,直接接收参数则不会出现乱码。

一般提到最多的也就上面4种方法,其它的也跟这些大同小异。仔细分析后,觉得还是第4种方法最适合解决当前问题,把中文参数进行如4中的操作。但又出现另外一个问题,由于这是一个用户可以自由输入链接地址的功能,所以首先要做的就是得先分析这些链接URL,解析出参数,再对这些参数进行4中操作,然后再合拼成原来的URL地址。

幸亏,URL参数解析C#已经有类库的支持,不用再去写那些复杂的正则表达式来匹配了。这里我也不详细说了,直接贴出原码:

public static string InitChineseUrl(string chineseUrl)

{

Uri url = new Uri(chineseUrl);

System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(url.Query, System.Text.Encoding.GetEncoding("utf-8"));

string query = "";

for (int i = 0; i < nv.Count; i++)

{

if (query.Trim() == string.Empty)

{

query = "?" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));

}

else

{

query += "&" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));

}

}

string u = chineseUrl.Split('?')[0] + query;

return u;

}

这里我是把所有的参数都进行gb2312编码操作了,反正参数如果是英文或者是数字,经过这些操作后还是不变的。

相关文章

的两个悬停控件.分别是HoverMenuExtender和ModalPopupExtender.他们可以打造很好的悬停效果...通常,我都是用panel来作为悬停内容的容器..-06-06

这篇文章主要介绍了 oledb连接Access数据库的方法,需要的朋友可以参考下-01-01

提示这个,不管怎么改配置文件的设置都不行,下面是修正方法,大家可以试试。-03-03

这篇文章主要介绍了使用教程教会大家利用MVC4制作图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下-11-11

下面就是介绍在.net下,如何使用水晶报表的方法。-04-04

这篇文章主要给大家介绍了关于 Core实现单体程序的事件发布/订阅的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧-03-03

异常详细信息: System.UnauthorizedAccessException: 对路径“D:/temp1/MyTest.txt”的访问被拒绝-09-09

最简单的缓存机制,把整个Aspx页面保存在服务器端内存中,用户请求页面时,直接从服务器端内存中提取数数据,不在经历页面的生命周期。-02-02

这篇文章主要介绍了使用 MVC4中的Bundle遇到的问题及解决办法,需要的朋友可以参考下-02-02

这篇文章主要介绍了 MVC 3仿Server.Transfer效果的实现方法,需要的朋友可以参考下-10-10

最新评论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。