当前位置 > 首页 > Asp.net

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

2012-10-14 23:43:00来源:Asp.net

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

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

页面显示乱码问题

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

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


<globalization fileEncoding="utf-8" />

而文件的编码不是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>

服务端的代码就是从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>

另外,我非常反感拼接这种提交数据:“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

  • What is a clustered index anyway?

    2009-7-11 12:42:00

    Recovered from DotNetJunkies blog -- Originally Posted: Saturday, February 17, 2007 Wanted to d

  • WPF 员工卡条形码

    2010-7-26 11:50:00

    作者: Gnie 发表于 2010-07-26 11:31 原文链接 阅读: 60 评论: 0      大家都知道条形码(Barcode)是一种可

  • Going to Vista

    2007-4-15 10:08:00

    After several issues using Windows XP with ATI DriversI decided to update to Vista my new professio

  • ASP.NET MVC Web API 学习笔记----HttpClient简介

    2012-11-8 10:48:00

    1. HttpClient简单介绍 依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于

  • VC++, VC#, VB.NET 编码规范 [中文版]

    2010-9-7 23:58:00

    作者: Jialiang 发表于 2010-09-07 23:55 原文链接 阅读: 0 评论: 0 应园友在 这篇博文 中的要求,我们项目组里的蒋里京同学已将VC++, VC#, VB.

  • 33岁的项目经理,下一步我往何处去???——Leo网上答疑(7)

    2010-1-20 12:35:00

    阅读: 1182 评论: 10 作者: leo(张大志) 发表于 2010-01-20 09:28 原文链接 Leo ,您好! 我是一名在国企

  • 使用NSun(框架)快速开发项目(三)NSun1.0.0.1版本更新

    2009-8-24 16:52:00

    摘要: 从NSun1.0.0.0更新至1.0.0.1。 更新内容: *修改1.0.0.0更新方法(Update)*修改1.0.0.1分页方法(SelectPageToList)*对1.0.0.0代码

  • Ajax中AutoComplete的使用摘要

    2007-9-13 22:08:00

    摘要: 摘要:自动完成功能在Ajax时代已经见的很多了,像Google Suggest,很多邮箱中也都有应用。在Atlas对于自动完成功能提供了很好的支持,提供了客户端的AutoComplete B

  • 老赵看博客园首页

    2009-3-22 0:11:00

    摘要: 不知道从什么时候开始,争论一篇文章是不是应该上首页成为博客园的一种流行。无论从任何角度出发,一旦谈起“文章质量”必然会有朋友会牵扯到“首页”(见《和谐社区,和谐技术》),然后动辄又抡起一句“

  • STM.net 在.net 4.0下归入到哪个类库里面?

    2011-9-3 15:08:00

    最近做个东西,需要用到内存事务,,看了下,网上介绍用STM.net,可以,刚刚上去看了下,好像下载链接已经关掉了?难道已经集成了4.0的framework里面了?有没有人知道是哪个的?