encodeURIComponent,ü,ç,İ,ı,ğ,ö的麻烦

时间:2010-08-04 11:23:09

标签: javascript asp.net ajax

我的问题是。

我正在通过这种方式通过Ajax向Generic Handler发送值。

xmlHttpReq.open("GET", "AddMessage.ashx?" + (new Date().getTime()) +"&Message=" + encodeURIComponent(Message), true);

当消息包含İ,ç,ö,ğ,ü,ı,他们看起来就像在HandlerÄ°,Ã,,Ã,Ä,Ä,ı,

我在AddMessage.ashx处理程序

中写这个
    context.Request.ContentEncoding = System.Text.Encoding.UTF8;
    context.Response.ContentEncoding = System.Text.Encoding.UTF8;

我也在MasterPage和Aspx页面上写这个

    Response.ContentEncoding = System.Text.Encoding.UTF8;
    Request.ContentEncoding = System.Text.Encoding.UTF8;

但它没有任何意义。

1 个答案:

答案 0 :(得分:2)

我相信您的错误在于您的浏览器与服务器之间的编码不匹配。如果浏览器假设你的页面是用latin-1编码的(或者更准确地说是iso-8859-1),那么字母'ü'的encodeURIComponent的结果将是'%u00c3%u00bc',当被解释为UTF-8时服务器将被解码为Ã。

除非你完全确定你在做什么,否则你不应该对编码进行硬编码。尝试删除部分或全部自定义编码代码,看看是否可以让它工作。

我设置了一个空白的ASP.NET Web应用程序,看看我是否可以复制你的问题。

<强> WebForm1.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script>
            var client = new XMLHttpRequest();
            client.open('GET', 'Handler1.ashx?Message=' + encodeURIComponent('ü'));
            client.send();
    </script>
</head>
<body>
    åäö
</body>
</html>

在调试器中查看已解码的Request.QueryString [“Message”]会产生预期的结果(ü)。

但是如果我们欺骗浏览器认为该页面是在ISO-8859-1中传输的:

using System;

namespace WebApplication1 {
    public partial class WebForm1 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            Response.ContentType = "text/html; charset=iso-8859-1";
        }
    }
}

Request.QueryString [“Message”]现在包含“ü”。并且浏览器无法在正文中正确呈现åäö字符串。

查看使用某些Web调试工具(如fiddlerfirebug)来确定服务器实际用于传输内容的编码以及浏览器认为它接收的编码。

如果从另一个AJAX请求收到'Message'变量的内容,您应该检查以确保您使用正确的编码来传输该内容。

底线,不要太在意编码。在大多数情况下,做任何事情都不是正确的事情。