编码转换gbk,utf8,快疯了

发布于 2021-11-26 18:50:27 字数 2641 浏览 817 评论 11

用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

牵你的手,一向走下去 2021-11-30 06:37:06

乱是正常的,第一步你编码就错了,后面拿着错误的数据转码只是接着错而以。把HttpUtil.getHtml(urlStr,null);改成HttpUtil.getHtml(urlStr,"gbk");

陌上芳菲 2021-11-30 06:37:05

恩, 这个方法值得试试.

尐偏执 2021-11-30 06:36:57

不要只看ide或者编辑器里面打印出来的信息,因为个别ide的log窗口也是会做编码转换的,最简单就是把字符串直接处理然后用html输出看看结果就知道,html和程序处理编码一致就好了。

偏爱自由 2021-11-30 06:35:41

那我得保存下来那个文件,在按utf8读取出来? 整个简单的就好了,

女中豪杰 2021-11-30 06:34:50

jodd 看看没有这个方法嗯。自己找下找下

凡尘雨 2021-11-30 06:34:10

www.oschina.net/code/snippet_59256_34869 给你贴个地址把。 我是这样处理的。。。

爱的那么颓废 2021-11-30 06:31:41

引用来自“JFinal”的评论

全部使用 utf-8 省事

少女情怀诗 2021-11-30 06:04:17

引用来自“JFinal”的评论

全部使用 utf-8 省事

哑剧 2021-11-30 04:28:49

引用来自“JFinal”的评论

全部使用 utf-8 省事

岁月打碎记忆 2021-11-30 04:24:21

全部使用 utf-8 省事

落墨 2021-11-29 21:55:54

最终我还是解决了

上面的函数gbk2Utf8()是错误的,是不能直接转的,需要转成Unicode中间码再转为目标码就ok的

找了一个正确的函数: http://my.oschina.net/wmhx/blog/356058

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文