Я считаю, что ваша ошибка заключается в несоответствии кодировки между вашим браузером и вашим сервером.Если браузер предполагает, что ваша страница закодирована в латинице-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, вы должны проверить, чтобы убедиться, что вы используете правильную кодировкучтобы передать и этот контент.
Итог, не беспокойтесь о кодировках.Ничего не делать, в большинстве случаев будет правильным.