HttpHeader UTF编码

时间:2011-05-18 12:55:26

标签: jquery ajax asp.net-mvc encoding http-headers

我需要在Http Header中存储不同语言的消息:

响应标头

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失去了它的格式。它应该是“Tokenwysł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 个答案:

答案 0 :(得分:2)

正如已经指出的,标题应该只包含US-ASCII或ISO-8859-1字符。

根据要阅读标题的人,考虑urlencode()消息。

这将确保标题中只有ASCII字符。只要你一直使用UTF-8,它就能正常工作。

当然,您需要在其上执行urldecode(),以便再次可读。

答案 1 :(得分:2)

我对Martijn Boland的这个非常消息传递项目遇到了同样的问题。在我的情况下,我需要在巴西葡萄牙语中使用的重音字符:éáíóãõõ等......

我这样做是为了解决问题:

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);

那是因为现在我们得到entity numbersHTML标记)而不是纯文本。

这样做你不需要在答案中提到的额外的decode-jquery-plugin。

答案 2 :(得分:1)

HTTP headers使用US-ASCII编码,因此您应避免在此编码之外的标头中发送字符。 message body当然可以使用任何编码。

答案 3 :(得分:1)

好的,我明白了。为了使用其他语言字符,我执行以下操作:

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

然后,我使用这个插件:http://urldecoderonline.com/javascript-url-decode-jquery-plugin.htm 对字符串进行urldecode。这会产生正确的输出:)。

感谢大家的帮助。

答案 4 :(得分:0)

HttpHeaders只能包含ISO-8859-1字符(可用的完整列表here)。

我不相信有任何解决方法。