编码转换gbk,utf8,快疯了
用httpclient抓取了一个gbk的网页保存成一个字符串,
String urlStr="http://cunnai.xiangkaixin.com/quweitupian/10187.html"; String hp = HttpUtil.getHtml(urlStr, null); log.info(hp); //乱码 String htmlpage = gbk2Utf8(hp); log.info(htmlpage); //乱码
public static String getHtml(String url, String encode) throws Exception { HttpEntity entity = null; String pagedata = null; HttpResponse response = null; DefaultHttpClient httpclient = new DefaultHttpClient(); //httpclient.getParams().setParameter("Content", "text/html,charset=" + encode); HttpGet httpget = new HttpGet(url); httpget = setDefalutHeader(httpget); response = httpclient.execute(httpget); entity = response.getEntity(); pagedata = getStringFromResponse(entity.getContent(), encode); httpclient.getConnectionManager().shutdown(); return pagedata; } private String gbk2Utf8(String gbk) throws UnsupportedEncodingException { String iso = new String(gbk.getBytes("UTF-8"), "ISO-8859-1"); String utf8 = new String(iso.getBytes("ISO-8859-1"), "UTF-8"); return utf8; } private static String getStringFromResponse(InputStream content, String encode) throws IOException { return convertStreamToString(content, encode); } public static String convertStreamToString(InputStream is, String encode) throws UnsupportedEncodingException { BufferedReader reader = null; if (null == encode || "".equals(encode.trim())) { reader = new BufferedReader(new InputStreamReader(is)); } else { reader = new BufferedReader(new InputStreamReader(is, encode)); } StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + ""); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != reader) { reader.close(); reader = null; } } catch (Exception e) { } } return sb.toString(); }
在eclipse里面debug窗口看到汉字是正常的,但log4j用UTF-8打印就是乱码,尝试把gbk转成utf8的编码打印还是乱的,
但截取出来的汉字再发送到本机的tomcat上处理又是正常的,
但从本机发送到阿里云的tomcat上又是乱码, 我就疯的醉了..
我如何能让那个GBK的网页保存成String也是UTF-8的编码呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
乱是正常的,第一步你编码就错了,后面拿着错误的数据转码只是接着错而以。把HttpUtil.getHtml(urlStr,null);改成HttpUtil.getHtml(urlStr,"gbk");
恩, 这个方法值得试试.
不要只看ide或者编辑器里面打印出来的信息,因为个别ide的log窗口也是会做编码转换的,最简单就是把字符串直接处理然后用html输出看看结果就知道,html和程序处理编码一致就好了。
那我得保存下来那个文件,在按utf8读取出来? 整个简单的就好了,
jodd 看看没有这个方法嗯。自己找下找下
www.oschina.net/code/snippet_59256_34869 给你贴个地址把。 我是这样处理的。。。
引用来自“JFinal”的评论
全部使用 utf-8 省事
引用来自“JFinal”的评论
全部使用 utf-8 省事
引用来自“JFinal”的评论
全部使用 utf-8 省事
全部使用 utf-8 省事
最终我还是解决了
上面的函数gbk2Utf8()是错误的,是不能直接转的,需要转成Unicode中间码再转为目标码就ok的
找了一个正确的函数: http://my.oschina.net/wmhx/blog/356058