您的位置:首页 > 编程语言 > Java开发

ajax调用java,中文乱码解决办法

2016-06-30 17:16 477 查看
一个页面只是简单的输入框,后台调用ElasticSearch Index库,用户可以输入中文,虽然页面使用了
<%@ page language="java" contentType="text/html; charset=utf-8" %>
页面里的<script>也加上了
<script type="text/javascript" charset="UTF-8">

但是最终的页面还是显示 ??? 。



经过一番搜索,最终的方式还是encode和decode,直接上代码,页面输入的内容为赋值给 q ,在构造 URL 之前,先对其进行 UTF-8 转码。 从服务端返回数据后,再进行UTF-8转码。

@RequestMapping(value = "callback",method =RequestMethod.GET)
@ResponseBody
public String callback(String size,String from, String q) throws IOException {
String resultStr = "";
q = q.replace(" ", "+"); // 用加号替换输入字符串的空格
try {
String server = ConfigUtils.getSysConfig("ELASTICSEARCH_SERVER");
String index = ConfigUtils.getSysConfig("ELASTICSEARCH_INDEX_NAME");

q = URLEncoder.encode(q, "UTF-8"); // 处理中文检索文字
resultStr = WSUtils.findWsData(server + index + "/_search?size="+size+"&from="+from+"&q=" + q);

return URLEncoder.encode(resultStr, "UTF-8"); // 为了和ajax进行数据传输
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
处理后的数据传给ajax是这样子的:



Ajax 得到转码后的数据需要进行 decode,注意一定要使用 decodeURIComponent 而不是 decodeURI ,具体原因可百度。
$.ajax({
url: "${ctx}/concept/callback?size="+size+"&from="+from+"&q="+jsonReq,
type: "GET",
contentType: "application/json",

success: function(data) {
console.log("data = " + decodeURIComponent(data));
eval("var results = " + decodeURIComponent(data));
if(results.hits.hits!=null && results.hits.hits!=""){

在ajax里处理后显示的数据是这样子的:



这样就确保了java后台的数据在传给 ajax 的过程中保证了中文的正确处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ajax 乱码 中文