ElasticSearch2.0 index中文乱码及解决问题
2015-11-30 21:00
591 查看
今天使用HttpClient 在ElasticSearch2.0上index documents时,由于document中包含有中文,浏览器打开一看,发现中文乱码,index的代码如下:
util.upload("test2", "水岸线接地网都!(!@!@u你好这是一份测试文档wdjqwdqu","c:\\test.txt","lpchou",new Date(),1,"lpchou")
结果是能够进行index并得到id,但是打开浏览器一看,发现中文乱码,汉字全用"?"代替了,图中第一个中文没乱码因为我是用的JAVA API index的,后两个乱码的用的HttpClient的HttpPost来index的。
解决如下:
原因是我在index到ElasticSearch里的时候需要指定编码,方法为在使用HttpPost的时候需要传入一个StringEntity的参数,在构造StringEntity的时候设置编码为"UTF-8"即可,代码如下(注意与上面代码的区别)
@Override
public String indexContent(String index, String type, String jsonContent) {
String indexUri="http://"+mMasterNodeUrl+":"+mMasterNodePort+"/"+index+"/"+type
+"/";
StringEntity stringEntity=null;
stringEntity = new StringEntity(jsonContent,"UTF-8");
System.out.println(stringEntity.toString());
JsonNode rootJsonNode=sendHttpPost(indexUri, stringEntity);
if(rootJsonNode!=null){
String id=rootJsonNode.get("_id").asText();
return id;
}
return null;
}可以看到,在构造StringEntity的时候,如果指定了编码,连异常都没有了。再次Index后,浏览器查看结果如下:
util.upload("test2", "水岸线接地网都!(!@!@u你好这是一份测试文档wdjqwdqu","c:\\test.txt","lpchou",new Date(),1,"lpchou")
/** * 上传文档,成功返回文档id,否则返回null * */ public String upload(String name,String content,String path,String author, Date date,int level,String accessUserName){ String idString=null; idString=indexDocument(name, content, path, author, date, level, accessUserName); return idString; }
/** * 对Document建立索引,返回索引id * */ private String indexDocument(String name,String content,String path,String author, Date date,int level,String accessUserName){ Map<String,Object> documentMap=new HashMap<String,Object>(); documentMap.put(FIELD_NAME,name);documentMap.put(FIELD_CONTENT,content); documentMap.put(FIELD_PATH,path);documentMap.put(FIELD_AUTHOR,author); documentMap.put(FIELD_DATE,date.getTime());documentMap.put(FIELD_LEVEL,level); documentMap.put(FIELD_ACCESS_USER_NAME,accessUserName); return mElasticSerachService.indexContent(mIndex, mType, documentMap); }
@Override public String indexContent(String index, String type, Map<String, Object> content) { ObjectMapper objectMapper=new ObjectMapper(); try { String jsonString=objectMapper.writeValueAsString(content); return indexContent(index, type, jsonString); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } @Override public String indexContent(String index, String type, String jsonContent) { String indexUri="http://"+mMasterNodeUrl+":"+mMasterNodePort+"/"+index+"/"+type +"/"; StringEntity stringEntity=null; try { stringEntity = new StringEntity(jsonContent); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } System.out.println(stringEntity.toString()); JsonNode rootJsonNode=sendHttpPost(indexUri, stringEntity); if(rootJsonNode!=null){ String id=rootJsonNode.get("_id").asText(); return id; } return null; }
结果是能够进行index并得到id,但是打开浏览器一看,发现中文乱码,汉字全用"?"代替了,图中第一个中文没乱码因为我是用的JAVA API index的,后两个乱码的用的HttpClient的HttpPost来index的。
解决如下:
原因是我在index到ElasticSearch里的时候需要指定编码,方法为在使用HttpPost的时候需要传入一个StringEntity的参数,在构造StringEntity的时候设置编码为"UTF-8"即可,代码如下(注意与上面代码的区别)
@Override
public String indexContent(String index, String type, String jsonContent) {
String indexUri="http://"+mMasterNodeUrl+":"+mMasterNodePort+"/"+index+"/"+type
+"/";
StringEntity stringEntity=null;
stringEntity = new StringEntity(jsonContent,"UTF-8");
System.out.println(stringEntity.toString());
JsonNode rootJsonNode=sendHttpPost(indexUri, stringEntity);
if(rootJsonNode!=null){
String id=rootJsonNode.get("_id").asText();
return id;
}
return null;
}可以看到,在构造StringEntity的时候,如果指定了编码,连异常都没有了。再次Index后,浏览器查看结果如下:
相关文章推荐
- Linux下修改MySQL编码的方法
- cmd模式下中文乱码的解决方法(注册表)
- 解决mysql5中文乱码问题的方法
- EBS xml publisher中文乱码问题及解决办法
- ExtJS中文乱码之GBK格式编码解决方案及代码
- php url地址栏传中文乱码解决方法集合
- 常见php与mysql中文乱码问题解决办法
- 网站开发防止中文乱码需要了解的codepage的重要性小结
- php中json_encode UTF-8中文乱码的更好解决方法
- js escape,unescape解决中文乱码问题的方法
- js url传值中文乱码之解决之道
- JQuery异步获取返回值中文乱码的解决方法
- ASP.NET MVC Web API HttpClient简介
- JSP中文乱码常见3个例子及其解决方法
- 如何解决JQuery ajaxSubmit提交中文乱码
- jquery向.ashx文件post中文乱码问题的解决方法
- 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
- opensuse下如何解决jfreechart中文乱码的问题
- DOS命令行窗口mysql中文显示乱码问题解决方法
- utf-8编码引起js输出中文乱码的解决办法