44

$.getJSON()在我的网络应用程序中,我使用 jQuery 的方法提交了一些表单字段。我在编码方面遇到了一些问题。我的应用程序的字符集是charset=ISO-8859-1,但我认为这些字段是用UTF-8.

如何设置$.getJSON通话中使用的编码?

4

6 回答 6

45

如果要使用$.getJSON(),可以在调用之前添加以下内容:

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});

您可以使用所需的字符集而不是utf-8.

这些选项在此处进行了说明。

contentType :向服务器发送数据时,使用此content-type. 默认为application/x-www-form-urlencoded,这在大多数情况下都很好。

scriptCharset :jsonp仅适用于具有or scriptdataType 和 GET 类型的请求。强制将请求解释为特定字符集。只需要远程和本地内容之间的字符集差异。

您可能需要一个或两个...

于 2008-08-25T22:12:25.900 回答
36

我认为$.ajax()如果您想更改编码,您可能必须使用,请参阅contentType下面的参数(successerror回调假设您在 html 中有<div id="success"></div>和):<div id="error"></div>

$.ajax({
    type: "POST",
    url: "SomePage.aspx/GetSomeObjects",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: "{id: '" + someId + "'}",
    success: function(json) {
        $("#success").html("json.length=" + json.length);
        itemAddCallback(json);
    },
    error: function (xhr, textStatus, errorThrown) {
        $("#error").html(xhr.responseText);
    }
});

实际上,我大约一个小时前就不得不这样做,真是巧合!

于 2008-08-25T19:23:06.447 回答
5

您需要使用 Wireshark 分析 JSON 调用,因此您将查看是否在 JSON 页面的形成中包含字符集,例如:

  • 如果页面很简单 if text/html
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 正常。
0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 内容类型:t
0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..缓存-
0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 控制:无缓存
  • 如果页面的类型包括自定义 JSON,MIME "charset = ISO-8859-1"
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 正常。
0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .缓存控制:
0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e 无缓存 ..内容
0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-类型:文本/htm
0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; 字符等=ISO-8
0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..连接

这是为什么?因为我们不能在 JSON 的页面上放置这样的目标:

就我而言,我使用制造商 Connect Me 9210 Digi:

  • 我必须使用一个标志来表示将使用非标准 MIME: p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • 它在变量中添加了新的 MIME:strcpy (p-> theCgiPtr-> fOtherMimeType, "text/html; charset = ISO-8859-1");

它对我有用,而无需将 JSON 传递的数据转换为 UTF-8,然后在页面上重做转换......

于 2012-03-07T17:22:06.330 回答
1

encodeURI()在客户端 JS 中使用并在URLDecoder.decode()服务器 Java 端工作中使用。


例子:

  • Javascript

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
  • 爪哇

    java.net.URLDecoder.decode(params.user, "UTF-8");

于 2012-01-03T02:52:10.867 回答
0

使用此功能重新获得 utf-8 字符

function decode_utf8(s) { 
  return decodeURIComponent(escape(s)); 
}

示例: var new_Str=decode_utf8(str);

于 2014-11-12T12:43:55.283 回答
0

如果您想使用 $.getJSON() 您可以在调用之前添加以下内容:

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});
于 2019-11-16T11:08:44.047 回答