我的问题是。
我像这样通过Ajax将值发送到泛型处理程序。
xmlHttpReq.open("GET", "AddMessage.ashx?" + (new Date().getTime()) +"&Message=" + encodeURIComponent(Message), true);当消息包含İ、ç、ö、ğ、ü、ı时,它们看起来与处理程序上的处理程序类似。
我在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;但这没有任何意义。
发布于 2010-08-05 09:55:13
我相信你的错误在于你的浏览器和服务器之间的编码不匹配。如果浏览器假设您的页面是用拉丁文-1(或者更准确地说是iso-8859-1)编码的,则字母'ü‘的encodeURIComponent结果将是'%u00c3%u00bc’,当在服务器上解释为UTF-8时,它将被解码为?
除非你完全确定你在做什么,否则你不应该硬编码。尝试删除部分或全部自定义编码代码,然后看看是否可以让它正常工作。
我设置了一个空白的ASP.NET网络应用程序,看看是否可以复制您的问题。
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“消息”产生了预期的结果(ü)。
但是如果我们欺骗浏览器,使其认为页面是以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“现在包含”?“。并且浏览器不能在正文中正确地呈现stringäöstring。
使用一些web调试工具(如fiddler或firebug )来查看,以确定服务器实际使用什么编码来传输内容,以及浏览器认为它正在接收什么编码。
如果'Message‘变量的内容是从另一个AJAX请求中收到的,你应该检查一下,以确保你也使用了正确的编码来传输该内容。
归根结底,不要费心太多关于编码的事情。在大多数情况下,什么都不做是正确的。
https://stackoverflow.com/questions/3405001
复制相似问题