ajax调用java,中文乱码解决办法
2016-06-30 17:16
477 查看
一个页面只是简单的输入框,后台调用ElasticSearch Index库,用户可以输入中文,虽然页面使用了
但是最终的页面还是显示 ??? 。
经过一番搜索,最终的方式还是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 的过程中保证了中文的正确处理。
<%@ 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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树