前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >解决ASP.NET中的各种乱码问题

解决ASP.NET中的各种乱码问题

作者头像
小端
发布于 2018-04-16 03:34:12
发布于 2018-04-16 03:34:12
2K0
举报
文章被收录于专栏:java架构师java架构师

总结分类:

一、页面显示乱码

1、如果web.config配置:<globalization fileEncoding="utf-8" />

如果文件编码不是UTF-8,则会乱码,反之不然。

2、不设置fileEncoding,不会乱码

3、fileEncoding="gb2312",文件以utf-8编码,此时也不会有乱码现象。

建议最好让所有文件都以UTF-8编码保存,从而解决这类乱码问题。

二、Ajax提交的数据乱码问题

URL拼写参数的时候,如果遇到一些特殊字符。

<p><a id="link2" href="#" target="_blank">escape</a></p> <script type="text/javascript">     var str = "aa=1&bb=" + escape("fish li + is me.") + "&cc=" + escape("大明王朝1368");     $("#link2").attr("href", "/test_url_decode.ashx?method=escape&" + str); </script>

输出结果:bb=fish li   is me.

解决办法:使用JQuery的$.param()

<script type="text/javascript">     var myobject = { aa: 1, bb: "fish li + is me.", cc: "大明王朝1368" };     $("#link1").attr("href", "/test_url_decode.ashx?method=param&" + $.param(myobject)); </script>

输出结果:bb=fish li + is me

当然,也可以用$.ajax方式写:

$.ajax({                 url: "/TestParam.ashx", type: "GET", cache: false, data: { id: 2, name: "fish li + is me.", tel: "~!@#$%^&*()_+-=<>?|",                    "x?x!x&x": "aa=2&bb=3&cc=汉字。",  // 特殊的键名,值内容也特殊。 encoding: "见鬼去吧。?& :)", 中文键名: "大明王朝1368" }, success: function(responseText) {                     $("#divResult").html(responseText);                 }

  })

==>JavaScript中正确的URL编码方式

看过前面的示例,您有没有想过:为什么escape不能解决的问题,JQuery就能解决呢?

对于这个问题,我想还是先来看看MSDN中关于escape的说明:

escape方法不能用来对唯一资源标示符(URL)进行编码,请使用encodeURI和encodeURIComponent方法

从JQuery的实现方式也可以看出:encodeURI()其实也是不推荐在编码URL数据时使用的。

encodeURI用于对整个URL字符串进行编码,如汉字。某个参数值本身包含一些特殊字符, 例如:key = "x?x/x&x", value = "aa=2&bb=3&cc=汉字。",这个函数的结果将会不正确。 它通常用于编码URL路径中包含有类似汉字这种场合,不适合处理URL参数。 但是,URL路径中的目录名与文件名,我们可以选择英文字符,所以encodeURI通常没有机会使用。

三、ASP.NET中的编码方式

 提供了三种:

1、HttpUtility.UrlPathEncode

2、HttpUtility.UrlEncode

3、Server.UrlEncode

4、System.Uri这个类,它也有一些用于URL处理的方法。 比如EscapeUriString,EscapeDataString这二个方法,可用于URL路径与参数的编码任务。

面对这些方法,我该选择哪个? (编码查询参数 时选择HttpUtility.UrlEncode(str) , 并且在拼接URL时,采用 HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value) 的方法。 如果要 编码URL中的路径,请使用HttpUtility.UrlPathEncode()

下面我来解释前面不建议使用的另外的一些方法的原因: 1. Server.UrlEncode: 这个方法其实也是调用HttpUtility.UrlEncode,只是它会尽量使用Response.ContentEncoding所表示的编码格式, 然而HttpUtility.UrlEncode(str)总是会使用UTF-8编码,如果你不希望被字符编码纠缠,那就应该放弃Server.UrlEncode , 毕竟UTF-8编码才是更好的选择。 2. 虽然System.Uri的那二个编码方法,也能实现我们需要的URL编码任务, 但是,当ASP.NET在填充Request.QueryString, Request.Form时,使用的解码方法是HttpUtility.UrlDecode, 因此,如果你执意选择使用System.Uri的相关的编码方法,显然就不能与解码方法匹配,后果如何就难说了。)这一堆解释啊

结论:

一个完整的URL可以简单地认为包含二个部分:文件路径(含目录) 和 查询参数(QueryString) 在编码时,一定要分开处理。 编码文件路径时,应该选择 encodeURI(JS),HttpUtility.UrlPathEncode 。 编码查询参数时,应该选择 encodeURIComponent,HttpUtility.UrlEncode,而且拼接方式应该是:Encode(key) + "=" + Encode(value)和HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value)

绝对不能先把整个URL(包含查询参数)拼接起来了,再来考虑该选择哪个编码方法。

再说一遍:在JavaScript中使用escape肯定是错误的。

《未完待续。。。》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
解决ASP.NET中的各种乱码问题
经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过。 在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考。 页面显示乱码问题 在一个网站中,有些页面会正常显示,然而,有些
小端
2018/04/16
2.9K0
解决ASP.NET中的各种乱码问题
url带中文参数显示乱码的问题
最近要上个项目,其实很简单的东西,就是拼接一个url,不过url中的参数需要UrlEncode编码的,其实对我来说,这个问题很好解决,C#用HttpUtility.UrlEncode来进行编码,asp用Server.UrlEncode来进行编码。 问题解决了吗?问题刚刚开始 因为这个公用转向文件,是针对所有分站的,分站代码有.net和asp两种,文件编码格式也不一样。 头大的事情开始了。asp站的文件编码是gb2312,虽然.net的文件格式也是gb2312,但因为webconfig里设置的reque
脑洞的蜂蜜
2018/02/01
3.9K0
js解决url传递中文参数乱码问题
做后台管理系统的时候,出现了一个bug:点击“导出数据”按钮,打开文件里面是空的。
程序媛夏天
2024/01/18
4630
js解决url传递中文参数乱码问题
遭遇Asp.Net长文件名下载的问题和解决办法
在Asp.Net中写了一个附件上传和下载的程序,附件上传到数据库中,然后将附件的GUID保存起来,我们可以根据GUID来找到数据库中的附件,一般附件下载的代码是:
深蓝studyzy
2022/06/16
4610
在ASP.NET中,IE与Firefox下载文件带汉字名时乱码的解决方法
解决办法: HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); HttpContext.Current.Response.Charset = "gb2312"; HttpContext.Current.Response
跟着阿笨一起玩NET
2018/09/19
1.2K0
页面上通过地址栏传值时出现乱码的两种解决方法
1.在web.config中<system.web>节点下添加一句配置: <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" culture="zh-CN"/>  节点属性解释: requestEncoding:指定每一传入请求的假定的编码,包括已传递的数据和查询字符串。如果请求附带包含一个 Accept- Charset 属性的请求标头,它将重写配置中的该属性。默认编码为
小小许
2018/09/20
1.2K0
关于URL编码
一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址"http://www.abc.com",但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC 1738做了硬性规定:
ruanyf
2018/09/21
1.8K0
关于URL编码
URL汉字编码
一、问题的由来 URL就是网址,只要上网,就一定会用到。 一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文 字和符号。比如,世界上有英文字母的网址 “http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是 因为网络标准RFC 1738 做了硬性规定: "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()
wangxl
2018/03/07
3.1K0
URL汉字编码
C# HTTP系列9 GET与POST示例
学习本篇之前,对 HttpWebRequest 与 HttpWebResponse 不太熟悉的同学,请先学习《C# HTTP系列》。
张传宁IT讲堂
2019/09/18
1.3K0
C# HTTP系列9 GET与POST示例
各种编码格式,你懂得!!!
GBK,ISO-8859-1,GB2312的本质区别 编码有几种 ,计算机最初是在美国等国家发明的 所以表示字符只有简单的几个字母只要对字母进行编码就好 我们标准码 iso-8859-1 这就是一个标准 但是后来计算机普及了 于是就中国要使用计算机了 但是机器不认得中文,于是就有了国际码。 gbk gb2312都是这类。两个其实一个,一个是标准(发布的代号),一个是简称。后来多了个阿拉伯语、日语、韩语......所以就出来统一编码UniCode ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。此字符集主要支持欧洲使用的语言。
李才哥
2019/07/10
11.1K0
各种编码格式,你懂得!!!
常见乱码问题分析
在字符集这一篇文章中,我们基本了解了字符集的一些概念,也知道了什么是编码,什么是编码什么是解码。那么接下来我们就聊聊乱码。
@阿诚
2020/09/01
1.5K0
常见乱码问题分析
asp.net 解码gb2312下urlencode后的字符串
公司网站前期的网页用了gb2312保存用户数据,而我负责的部分用的是utf8,今天恰好要获取前期录入的数据于是毫无悬念地出现乱码问题,经过一番网上的搜索还是找不到完整解决方法,折腾好一段时间终于通过下面的例子推出了问题的所在: 这样的一个业务,客服用gb2312编码后 提交服务器,服务器接收时出现乱码,用System.Web.HttpUtility.UrlDecode();解码 ,还是出现乱码,困老了我好长时间,终于在google上找到了解决办法。 解决方案: HttpUtility.ParseQueryS
^_^肥仔John
2018/01/18
1.3K0
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
这就是为什么我们在浏览器的地址栏中能看到中文,但是把地址拷贝出来后中文就变成了一些奇怪的串了。
谭庆波
2018/08/10
4.8K0
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
如何用asp.net向其他服务器post一条信息
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
5120
encodeURIcomponent编码和ASP.NET之间编码转换
Javascript的URL编码转换,escape() encodeURI() encodeURIComponent(),asp.net 的UrlDecode进行解码 。 本文介绍对url编码的三种函数 escape() ,encodeURI() ,encodeURIComponent() escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)
张善友
2018/01/19
1.9K0
那些坑人的乱码问题(中)
上篇中已经讲了编码的基本概念,本来是直接写MySQL的编码问题的,但是觉的Unicode字符集和UTF编码太重要了,以至于不能忽略这部分内容。
一个无聊的人
2022/08/26
6810
那些坑人的乱码问题(中)
在浏览器输入网址,Enter之后发生了什么?
URL( uniform resource locator)由四部分组成:scheme、domain、path、resource
有态度的马甲
2024/04/26
1651
在浏览器输入网址,Enter之后发生了什么?
java中文乱码怎么解决_java中文乱码解决总结
为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。汉语编程是怎么回事我也不大清楚,应该是前年吧,我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他他也不说不大清楚,最后自己对这个学习也不了了之了。
全栈程序员站长
2022/09/08
8.7K0
java 汉字乱码_Java中文乱码问题
Java Source File 中Default encoding 改写成UTF-8(你所需的编码类型) 然后Update,OK确定就可以了。
全栈程序员站长
2022/09/14
7.8K0
java 汉字乱码_Java中文乱码问题
get请求中url传参中文乱码问题–集锦「建议收藏」
=================================================
全栈程序员站长
2022/07/19
7.1K0
get请求中url传参中文乱码问题–集锦「建议收藏」
相关推荐
解决ASP.NET中的各种乱码问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档