Http请求返回结果报UnsupportedCharsetException

最近在Http请求时,出现了Caused by: java.nio.charset.UnsupportedCharsetException: The unsupported charset name is "GB18030".

不支持GB18030

会出现这种问题,是由于我采用了EntityUtils.toString方法来解析回传数据。那么在这里会涉及到charset。

那么,先来看看如何取得response中的charset

         HttpEntity entity = httpResponse.getEntity();
	Header header = entity.getContentType();
	if (header != null) {
		HeaderElement[] elements = header.getElements();
		if (elements.length > 0) {
			String name = elements[0].getName();
			String charset = null;
			NameValuePair param = elements[0]
				.getParameterByName("charset");
			if (param != null) {
				charset = param.getValue();
			}

			Charset c = (charset != null && charset.length() > 0) ? Charset
				.forName(charset) : null;
			System.out.println(c.name());
		}
	}


再来看看charset说明中,其所支持的:The following charsets should be supported by any java platform: US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.

所以,如果返回来的是GB18030,自然就不支持了

解决的方法:

用下面这个方法代替EntityUtils.toString

	public Object handleEntity(HttpEntity entity, String charset)
			throws IOException {
		if (entity == null)
			return null;

		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];

		long count = entity.getContentLength();
		long curCount = 0;
		int len = -1;
		InputStream is = entity.getContent();
		while ((len = is.read(buffer)) != -1) {
			outStream.write(buffer, 0, len);
			curCount += len;
		}

		byte[] data = outStream.toByteArray();
		outStream.close();
		is.close();
		return new String(data, charset);
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值