encodeURIComponent, проблемы с ü, ç, İ, ı, ğ, ö - PullRequest
2 голосов
/ 04 августа 2010

Моя проблема в том, что

Я отправляю значения в Generic Handler через Ajax следующим образом.

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

, когда сообщение содержит İ, ç, ö, ğ, ü, ıони выглядят так на обработчике Å °, ç, ö, Ä, ü, Ä ±

Я пишу это в AddMessage.ashx Handler

    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 Ответ

2 голосов
/ 05 августа 2010

Я считаю, что ваша ошибка заключается в несоответствии кодировки между вашим браузером и вашим сервером.Если браузер предполагает, что ваша страница закодирована в латинице-1 (или, точнее, iso-8859-1), результатом кодировкиURIComponent для буквы «ü» будет «% 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 ["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"] теперь содержит "ü".И браузер не может правильно отобразить строку в теле.

Посмотрите, используя какой-либо инструмент веб-отладки, такой как fiddler или firebug , чтобы определить, какую кодировкуСервер фактически использует для передачи содержимого и то, какую кодировку браузер считает получающим.

Если содержимое переменной 'Message' получено из другого запроса AJAX, вы должны проверить, чтобы убедиться, что вы используете правильную кодировкучтобы передать и этот контент.

Итог, не беспокойтесь о кодировках.Ничего не делать, в большинстве случаев будет правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...