因此,我已经处理这个问题已有一个多月了,并且我还在google以及Google上检查了几乎所有可能的相关解决方案,但找不到任何能够真正解决我问题的方法。我的问题是我正在尝试从网站下载html源,但是在大多数情况下,我得到的是某些文本显示一些“?” 其中的字符,很可能是因为该站点位于希伯来语中。这是我的代码,
public static InputStream openHttpGetConnection(String url) throws Exception { InputStream inputStream = null; HttpClient httpClient = new DefaultHttpClient(); HttpResponse httpResponse = httpClient.execute(new HttpGet(url)); inputStream = httpResponse.getEntity().getContent(); return inputStream; } public static String downloadSource(String url) { int BUFFER_SIZE = 1024; InputStream inputStream = null; try { inputStream = openHttpGetConnection(url); } catch (Exception e) { // TODO: handle exception } int bytesRead; String str = ""; byte[] inpputBuffer = new byte[BUFFER_SIZE]; try { while ((bytesRead = inputStream.read(inpputBuffer)) > 0) { String read = new String(inpputBuffer, 0, bytesRead,"UTF-8"); str +=read; } } catch (Exception e) { // TODO: handle exception } return str; }
谢谢。
要使用给定的编码从字节流中读取字符,请使用Reader。在您的情况下,它将类似于:
Reader
InputStreamReader isr = new InputStreamReader(inpputStream, "UTF-8"); char[] inputBuffer = new char[BUFFER_SIZE]; while ((charsRead = isr.read(inputBuffer, 0, BUFFER_SIZE)) > 0) { String read = new String(inputBuffer, 0, charsRead); str += read; }
您可以看到字节将直接作为字符读入— 这是读者的问题,即它是否需要读取一个或两个字节,例如在缓冲区中创建字符。基本上,这是您的方法,但是由于要读入字节而不是在读之后进行解码。