jQuery:为 json 响应设置编码为 utf8

Posted

技术标签:

【中文标题】jQuery:为 json 响应设置编码为 utf8【英文标题】:jQuery: Set encoding for json response to utf8 【发布时间】:2012-05-28 14:46:24 【问题描述】:

我在 json 中收到了对 jQuery 的回复。逻辑工作正常,但我无法让他正确编码数据(如 üäö)。

我在 SO 上搜索并找到了this 问题,该问题建议将getJSON 更改为普通的 AJAX 调用。我已经这样做了,并添加了 setContentType 选项,但是,只要出现 äüö,我仍然会收到奇怪的迹象。

关于如何解决这个问题的任何想法?

$(function() 
    $("#cnAntragsteller").autocomplete(
        source: function(request, response) 
            $.ajax(
                url: "http://localhost/api",
                dataType: "jsonp", 
                data: 
                    search: request.term
                ,
                success: function(data) 
                    response($.map(data.persons, function(item) 
                        return 
                            label: item.cn + " (PN: " + item.imPersonalNumber + ")",
                            value: item.cn,
                            pn: item.imPersonalNumber,
                            cn: item.cn,
                            cc: item.imCostCenter,
                            jb: item.imJobTitle,
                            jbd: item.imJobTitleDescription
                        
                    ));
                
            );
        ,

        minLength: 0,
        select: function(event, ui) 
            $("#pnAntragsteller").val(ui.item.pn);
            $("#jbAntragsteller").val(ui.item.jb);
            $("#jbdAntragsteller").val(ui.item.jbd);
            $("#ouKostenstelle").val(ui.item.cc);


            $.ajax(
                url: "http://localhost/api",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                data: 
                    pn: ui.item.pn
                ,
                success: function(data) 
                    $("#cnLeiter").val(data.cn);
                
            );
            
        )
)

响应标头(第一个标头不显示数据,它只是重定向到输出):

Content-Length:0
Date:Tue, 22 May 2012 06:13:41 GMT
Location:http://localhost/api/redirection
Server:Apache-Coyote/1.1

Content-Length:177
Content-Type:text/html
Date:Tue, 22 May 2012 06:13:41 GMT
Expires:0
Server:Apache-Coyote/1.1

注意:这些只是响应头,请求头是否也包含重要信息?

【问题讨论】:

您确定服务器以 UTF-8 格式返回数据吗? 嗯,我很清楚,但因为它只是 json 输出,没有 html,所以我不能添加元标记。输出由某个 JSP 页面生成。 您可以尝试使用 Web Inspector (Chrome/Safari) 或 Firebug 查看输出吗?检查标题和数据。还要确保 OutputStream 以 UTF-8 编写。 @nhahtdh 添加了有问题的标题。输出流是什么意思? 如果包装OutputStream的Writer不以UTF-8编码写入,那么数据就从服务器弄乱了。 【参考方案1】:

虽然您似乎已经解决了问题,但最好指出两点:

    jQuery 的 getJSON 默认使用 UTF-8。接受什么 你给出的页面上的答案是如果你想要一些编码 除了 UTF-8,你可以使用$.ajax()。其实作为另一个 那个页面上的回答说,即使你使用getJSON,你仍然可以 使用$.ajaxSetup设置编码。

    您可能希望将您的 JSP 标头 contentType 更改为 'application/json; charset=utf-8',因为这是您的 jQuery 方面所期望的。让事情保持一致总是好的。

【讨论】:

感谢您提供更多信息。我马上更新。【参考方案2】:

通过添加 JSP 标头解决了这个问题(我不知道 JSP,所以我花了一些谷歌搜索)。在页面导入标签上添加这个解决了这个问题:

<%@ page import="someEngine"  contentType="text/html; charset=UTF-8" pageEncoding="ISO-8859-1"%>

【讨论】:

对不起,我帮不上什么忙。我认为您可以接受自己的答案。 @nhahtdh 嘿,无论如何感谢您的帮助,您的方法是正确的。您必须等待 48 小时才能接受自己的答案。

以上是关于jQuery:为 json 响应设置编码为 utf8的主要内容,如果未能解决你的问题,请参考以下文章

SpringDoc (spring boot) utf-8 json 标头响应文档

带有json响应的jQuery ajax请求,如何?

使用 GZIP、JSON 响应和 JQuery

JMeter设置响应数据的编码格式

当 dataType 设置为 JSONP 时读取 JSON 响应

springboot响应消息(http)的编码设置