在我的网络应用中,我使用jQuery的$.getJSON()
方法提交了一些表单字段。我在编码方面遇到了一些问题。我的应用的字符集为charset=ISO-8859-1
,但我认为这些字段是UTF-8
提交的。
如何设置$.getJSON
来电中使用的编码?
答案 0 :(得分:43)
如果您想使用$.getJSON()
,可以在通话前添加以下内容:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
您可以使用所需的字符集代替utf-8
。
选项说明here。
contentType :
将数据发送到服务器时,请使用此content-type
。默认值为application/x-www-form-urlencoded
,大多数情况都可以。
scriptCharset :
仅适用于jsonp
或script
dataType和GET类型的请求。强制请求被解释为某个字符集。只需要远程和本地内容之间的字符集差异。
您可能需要一个或两个......
答案 1 :(得分:33)
如果您想更改编码,我认为您可能必须使用$.ajax()
,请参阅下面的contentType
参数(success
和error
回调假设你在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);
}
});
我实际上只需要在一个小时前做到这一点,真是巧合!
答案 2 :(得分:4)
您需要使用Wireshark分析JSON调用,因此您将看到是否在JSON页面的形成中包含charset,例如:
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 .Content -Type: t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..Cache- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 Control: no-cach
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-C ontrol: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..Conten 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-Type: text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio
为什么?因为我们不能在JSON的页面上放置这样的目标:
在我的情况下,我使用制造商Connect Me 9210 Digi:
它对我有用,无需转换JSON为UTF-8传递的数据,然后在页面上重做转换...
答案 3 :(得分:1)
在客户端JS中使用encodeURI()
并在服务器Java端工作中使用URLDecoder.decode()
。
示例:
<强>的Javascript 强>:
$.getJSON(
url,
{
"user": encodeURI(JSON.stringify(user))
},
onSuccess
);
<强>爪哇强>:
java.net.URLDecoder.decode(params.user, "UTF-8");
答案 4 :(得分:1)
如果要使用$ .getJSON(),可以在调用之前添加以下内容:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
答案 5 :(得分:0)
使用此功能重新获得utf-8字符
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
示例:
var new_Str=decode_utf8(str);