如何在.getJSON JQuery中设置编码

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

有谁知道,我可以在$.getJSON调用中设置编码?

我想如果你想改变编码,你可能必须使用$.ajax() ,请参阅下面的contentType参数( successerrorcallback假设你有<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 :仅适用于使用jsonpscript 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);