• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 解决ASP.NET中的各种乱码问题总结

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

作者:Fish Li 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Fish Li通过本文主要向大家介绍了asp乱码怎么解决,asp乱码,asp中文乱码,asp网页乱码,asp文件乱码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过。

在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考。

页面显示乱码问题

在一个网站中,有些页面会正常显示,然而,有些页面会显示成乱码。 如果发生这种情况,可以检查一下web.config和文件编码。

如果web.config是这样配置的:

<globalization fileEncoding="utf-8" />
</div>

而文件的编码不是UTF-8:

那么就会有乱码问题。

注意:反之是不是会出现乱码的。

1. 不设置fileEncoding,此时不会有乱码现象。

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

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

AJAX提交的数据乱码问题

AJAX技术流行了这么多年了,我想现在没有几个网站不使用这种技术的。 然而,有些人在使用AJAX时,遇到了乱码问题。

通过分析这类乱码案例中,我发现几乎都是采用这种方式向服务端提交数据: “key1=” + escape(value1) +“&key2=” + escape(value2)

这种方法在多数情况下,的确能够正常工作,然而遇到一些特殊字符,就行不通了。原因我后面再来解释。

我为这类不正确的方法准备了一个示例 (为了保持示例简单,我演示一个拼接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>

</div>

服务端的代码就是从QueryString读取那些参数值,然后输出。由于代码实在太简单,就不贴出了。(可下载示例代码)

当我点击链接时,服务端返回了这样的结果:

注意:"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>
</div>

另外,我非常反感拼接这种提交数据:“key1=” + escape(value1) +“&key2=” + escape(value2)

因为这种代码的可读性太差了,在此,我建议在AJAX调用时,最好直接使用JQuery的$.ajax方法向服务端提交数据。

请看下面的示例代码(注意我为data属性赋值的方式):

<p><a id="btnTestParam" href="javascript:void(0);">Click me! 【点击我】</a></p>
<div id="divResult"></div>

<script type="text/javascript">
  $(function() {
    $("#btnTestParam").click(function() {     
      $.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);
        }
      });
    });
  });
</script>

</div>

运行结果:

JavaScript中正确的URL编码方式

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

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

MSDN说的很清楚,我也没有必要再做解释。

不过,我想有人可能会问:我用POST提交数据呢?那可是不经过URL的。

是的,POST数据时,参数没有放在URL中,但是,仍然采用URL编码。

POST数据也采用URL编码,是因为:表单可以采用GET方式提交,那么数据将通过URL提交给服务器。

所以提交的数据都要经过URL编码。

我们再来看一下$.ajax是如何处理数据的提交过程的:

ajax: function( origSettings ) {
  var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
  
  // ............... 去掉一些无关的代码

  // convert data if not already a string
  if (s.data && s.processData && typeof s.data !== "string") {
    // 注意下面这个调用
    s.data = jQuery.param( s.data, s.traditional );
  }

</div>

再来看jQuery.param的实现过程:

// Serialize an array of form elements or a set of
// key/values into a query string
param: function( a, traditional ) {
  var s = [];
  // ............... 去掉一些无关的代码
  
  // If an array was passed in, assume that it is an array of form elements.
  if ( jQuery.isArray(a) || a.jquery ) {
    // Serialize the form elements
    jQuery.each( a, function() {
      add( this.name, this.value );
    });
    
  } else {
    // ............... 去掉一些非重点代码
  }

  // Return the resulting serialization
  return s.join("&").replace(r20, "+");

  function add( key, value ) {
    // If value is a function, invoke it and return its value
    value = jQuery.isFunction(value) ? value() : value;
    s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
  }
}

</div>

这段代码的核心就是add函数的实现了,它在内部调用了encodeURIComponent()函数。

我们应该注意JQuery对数据的处理方式:encodeURIComponent(key) + "=" + encodeURIComponent(value);

JQuery在最后还把%20还替换成 + 号了。

在WEB开发领域,我想大家对JQuery的权威应该不用怀疑吧? 所以我认为JQuery的方法肯定是正确的。

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

说到这里,我要说说为什么不推荐使用encodeURI。

encodeURI用于对整个URL字符串进行编码,如果某个参数值本身包含一些特殊字符。

例如:key = "x?x/x&x", value = "aa=2&bb=3&cc=汉字。",这个函数的结果将会不正确。

它通常用于编码URL路径中包含有类似汉字这种场合,不适合处理URL参数。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-11.net中实现listBox左右移动
  • 2017-05-11asp.net上传execl文件后,在页面上加载显示(示例代码)
  • 2017-05-11asp.net使用Socket.Send发送信息及Socket.SendFile传输文件的方法
  • 2017-05-11Winform OpenFileDialog打开文件对话框
  • 2017-05-11C# 生成高质量缩略图程序—终极算法
  • 2017-05-11VB.NET调用MySQL存储过程并获得返回值的方法
  • 2017-05-11Asp.Net 重定向必须要知道的一些资料
  • 2017-05-11SQL通用存储过程分页,支持多表联合
  • 2017-05-11ASP.NET 清除模式窗口数据缓存的操作方式
  • 2017-05-11asp.net 面试+笔试题目第1/2页

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net DataSet转换成josn并输出示例
    • vs 不显示行号的操作方法
    • asp.net 数据绑定 使用eval 时候报 字符文本中的字符太多 问题的解决方法
    • asp.net 图片验证码的HtmlHelper
    • ASP.NET AJAX时用alert弹出对话框
    • .NET实用扩展方法详解
    • 正则表达式速查表(ASP.NET)
    • ASP.NET实现License Key输入功能的小例子
    • ASP.NET自动为URL加上超链接的代码
    • asp.net开发中怎样去突破文件依赖缓存

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有