当前位置 > 首页 > 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