HttpHeader UTF кодировка - PullRequest
       20

HttpHeader UTF кодировка

1 голос
/ 18 мая 2011

Мне нужно хранить сообщения на разных языках в заголовке Http:

Заголовки ответа

Cache-Control   private
Content-Type    text/html; charset=utf-8
Server  Microsoft-IIS/7.5
X-AspNetMvc-Version 3.0
X-Message-Type  Success
X-Message   <p>Token wysÅany</p>
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Date    Wed, 18 May 2011 12:49:26 GMT
Content-Length  2

Но, как вы видите, X-Message теряет свое форматирование.это должно быть "Token wysłany".Помогите.спасибо

РЕДАКТИРОВАТЬ: это то, что у меня есть:

        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            var viewData = filterContext.Controller.ViewData;
            var response = filterContext.HttpContext.Response;

            foreach (var messageType in Enum.GetNames(typeof(MessageType)))
            {
                var message = viewData.ContainsKey(messageType)
                                ? (ErrorMessageExtensions.ErrorMessage)viewData[messageType]
                                : null;
                if (message != null) // We store only one message in the http header. First message that comes wins.
                {
                    response.AddHeader("X-Message-Type", messageType);
                    response.AddHeader("X-Message", message.RenderAjax());
                    return;
                }
            }
        }

Я пытаюсь интегрировать обмен сообщениями в мое приложение MVC (вот так): http://blogs.taiga.nl/martijn/2011/05/03/keep-your-users-informed-with-asp-net-mvc/ единственная проблемачто он должен поддерживать мультиязычность.Какие еще варианты (или исправления для этих решений, которые будут поддерживать символы других языков)?спасибо

Ответы [ 5 ]

2 голосов
/ 04 июля 2012

У меня возникла та же проблема с этим проектом обмена сообщениями Мартина Боланда.В моем случае мне были нужны акцентированные символы, которые мы используем на бразильском португальском языке: é á í ó ã õ, и т. Д.

Я сделал это, чтобы решить проблему:

response.AddHeader("X-Message", HttpUtility.HtmlEncode(message.ToString()));

а затем на странице просмотра (.cshtml), где отображается сообщение:

function displayMessage(message, messageType)
{
    $("#messagewrapper").html('<div class="messagebox ' + messageType.toLowerCase() + '"></div>');

    $("#messagewrapper .messagebox").html(message);

    displayMessages();
}

Обратите внимание, что я изменился с

$("#messagewrapper .messagebox").text(message);

на

$("#messagewrapper .messagebox").html(message);

Это потому, что теперь мы получаем номера сущностей (HTML разметка) вместо простого текста.

Так вы не будетенужен дополнительный плагин decode-jquery, который вы упомянули в своем ответе.

2 голосов
/ 18 мая 2011

Как уже указывалось, заголовки должны содержать только символы US-ASCII или ISO-8859-1.

В зависимости от того, кто будет читать заголовок, рассмотрите urlencode() сообщение.

Это обеспечит наличие в заголовке только символов ASCII.Пока вы все время работаете в UTF-8, он будет работать нормально.

Конечно, вам нужно сделать на нем urldecode(), чтобы он снова стал читаемым.

1 голос
/ 19 мая 2011

Хорошо, я понял это. Чтобы использовать символы других языков, я делаю следующее:

response.AddHeader("X-Message", HttpUtility.UrlEncode(message.RenderAjax(), Encoding.UTF8));

Затем я использую этот плагин: http://urldecoderonline.com/javascript-url-decode-jquery-plugin.htm urldecode строки. Это создает правильный вывод:).

спасибо всем за помощь.

1 голос
/ 18 мая 2011

Заголовки HTTP используют кодировку US-ASCII, поэтому следует избегать отправки символов в заголовках, которые находятся за пределами этой кодировки. Тело сообщения может, конечно, использовать любую кодировку.

0 голосов
/ 18 мая 2011

HttpHeaders может содержать только символы ISO-8859-1 (полный список доступен здесь ).

Я не думаю, что для этого есть какие-то обходные пути.

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