一个页面只是简单的输入框,后台调用ElasticSearch Index库,用户可以输入中文,虽然页面使用了
在ajax里处理后显示的数据是这样子的:
<%@ 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({
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 的过程中保证了中文的正确处理。