如何在.getJSON JQuery中设置编码
在我的web应用程序中,我使用jQuery $.getJSON()
方法提交了一些表单域。 我在编码方面遇到了一些问题。 我的应用程序的charset=ISO-8859-1
是charset=ISO-8859-1
但我认为这些字段是用UTF-8
提交的。
有谁知道,我可以在$.getJSON
调用中设置编码?
我想如果你想改变编码,你可能必须使用$.ajax()
,请参阅下面的contentType
参数( success
和error
callback假设你有<div id="success"></div>
html中的<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); } });
我实际上刚刚在一个小时前就这样做了,真是巧合!
如果你想使用$.getJSON()
你可以在调用之前添加以下内容:
$.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/json; charset=utf-8" });
你可以使用你想要的字符集,而不是utf-8
。
这里解释选项。
contentType :
将数据发送到服务器时,使用此content-type
。 默认是application/x-www-form-urlencoded
,这在大多数情况下都可以。
scriptCharset :
仅适用于使用jsonp
或script
dataType和GETtypes的请求。 强制请求被解释为某个字符集。 只需要远程和本地内容之间的字符集差异。
你可能需要一个或两个…
您需要使用Wireshark分析JSON调用,所以您会看到是否将JSON页面中的字符集包含在JSON页面中,例如:
- 如果页面很简单,如果text / html
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控制:不加约
- 如果页面的types包括MIME“charset = ISO-8859-1”的自定义JSON,
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控制: 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:
- 我不得不使用一个标志来表示会使用非标准的MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
- 它在variables中添加了新的MIME:strcpy(p-> theCgiPtr-> fOtherMimeType,“text / html; charset = ISO-8859-1”);
它为我工作,而不必转换由JSON传递给UTF-8的数据,然后重做页面上的转换…
在客户端JS中使用encodeURI()
,并在服务器Java端使用URLDecoder.decode()
。
例:
-
Javascript :
$.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );
-
Java :
java.net.URLDecoder.decode(params.user, "UTF-8");
使用此函数重新获得utf-8字符
function decode_utf8(s) { return decodeURIComponent(escape(s)); }
例:
var new_Str=decode_utf8(str);