【问题标题】:HttpHeader UTF encodingHttpHeader UTF 编码
【发布时间】:2011-05-18 12:55:26
【问题描述】:

我需要在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 失去了它的格式。它应该是“令牌 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/ 唯一的问题是它需要支持多语言。还有哪些其他选项(或支持其他语言字符的解决方案的修复)?谢谢

【问题讨论】:

  • 我来这里是为了找同样的东西。我也在使用 MvcNotification... :)

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


【解决方案1】:

我在 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。

【讨论】:

  • @Olivier:很高兴它有帮助! :)
【解决方案2】:

如前所述,标题应仅包含 US-ASCII 或 ISO-8859-1 字符。

根据谁将阅读标题,考虑urlencode() 发送消息。

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

当然,你需要在上面写一个urldecode(),这样它才能再次可读。

【讨论】:

  • 我将如何解码它?函数 checkAndHandleMessageFromHeader(request) { var msg = request.getResponseHeader('X-Message'); if (msg) { displayMessage(msg, request.getResponseHeader('X-Message-Type')); } }
  • @Shane 我不知道 ASP.net 中 URLDecode 数据的功能是什么(忽略了那个标签),但我确定它存在于基本库中。
【解决方案3】:

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

【讨论】:

  • 理论上不可能吗?根据thisIf a character set other than ISO-8859-1 is used, it MUST be encoded in the warn-text using the method described in RFC 2047 [14]. ...虽然我个人只是对它进行URLencode并完成它
  • @Pekka,我不会尝试这个。我总是会编码以便使用 ASCII。
  • 达林,我如何在消息正文中添加一些内容?
  • @Shane Km,这是服务器发送的内容。通常是您在浏览器中看到的 HTML。
  • @Shane Km,您的问题非常不清楚。你想达到什么目的?动作过滤器的目的是什么?为什么要附加 HTTP 标头?
【解决方案4】:

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

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

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

感谢大家的帮助。

【讨论】:

【解决方案5】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2011-02-10
    • 2012-03-13
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2016-07-05
    相关资源
    最近更新 更多