首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >encodeURIComponent,troubleü,ç,İ,ı,ğ,ö

encodeURIComponent,troubleü,ç,İ,ı,ğ,ö
EN

Stack Overflow用户
提问于 2010-08-04 19:23:09
回答 1查看 2.4K关注 0票数 2

我的问题是。

我像这样通过Ajax将值发送到泛型处理程序。

代码语言:javascript
复制
xmlHttpReq.open("GET", "AddMessage.ashx?" + (new Date().getTime()) +"&Message=" + encodeURIComponent(Message), true);

当消息包含İ、ç、ö、ğ、ü、ı时,它们看起来与处理程序上的处理程序类似。

我在AddMessage.ashx处理程序中编写了这段代码

代码语言:javascript
复制
    context.Request.ContentEncoding = System.Text.Encoding.UTF8;
    context.Response.ContentEncoding = System.Text.Encoding.UTF8;

我还在MasterPage和Aspx页面上写了这段代码。

代码语言:javascript
复制
    Response.ContentEncoding = System.Text.Encoding.UTF8;
    Request.ContentEncoding = System.Text.Encoding.UTF8;

但这没有任何意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-05 09:55:13

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

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

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

WebForm1.aspx

代码语言:javascript
复制
<%@ 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传输的:

代码语言:javascript
复制
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调试工具(如fiddlerfirebug )来查看,以确定服务器实际使用什么编码来传输内容,以及浏览器认为它正在接收什么编码。

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

归根结底,不要费心太多关于编码的事情。在大多数情况下,什么都不做是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3405001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档