如何读取使用UTF-8为InputStream?(How to read a InputStream

2019-07-30 13:20发布

欢迎各界

我正在开发一个Java应用程序,从互联网上,它给了我一个XML响应调用PHP。

在响应中包含该单词:“PROXIMO”,但是当我解析XML的节点并获取响应转换为字符串变量,我收到这样的词:“镨ó细末”。

我敢肯定,问题是,我在Java应用程序中使用不同的编码,然后PHP脚本的编码。 然后,我supose我必须设置编码一样在你的PHP的XML,UTF-8

这是我使用geat从PHP XML文件中的代码。

¿我应该在这个代码将编码设置为UTF-8改什么? (请注意,我不是使用bufered阅读器,我使用的输入流)

        InputStream in = null;
        String url = "http://www.myurl.com"
        try {                              
            URL formattedUrl = new URL(url); 
            URLConnection connection = formattedUrl.openConnection();   
            HttpURLConnection httpConnection = (HttpURLConnection) connection;
            httpConnection.setAllowUserInteraction(false);
            httpConnection.setInstanceFollowRedirects(true);
            httpConnection.setRequestMethod("GET");
            httpConnection.connect();               
            if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
                in = httpConnection.getInputStream();   

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();                     
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(in);
            doc.getDocumentElement().normalize();             
            NodeList myNodes = doc.getElementsByTagName("myNode"); 

Answer 1:

当你收到InputStream读取byte[]从中秒。 当你创建你的字符串,通过在CharSet为“UTF-8”。 例:

byte[] buffer = new byte[contentLength];
int bytesRead = inputStream.read(buffer);
String page = new String(buffer, 0, bytesRead, "UTF-8");

注意,你可能会想使你的缓冲一些理智的大小(如1024),并不断呼吁inputStream.read(buffer)


@Amir Pashazadeh

是的,你也可以使用一个InputStreamReader,并尝试改变解析()行:

Document doc = db.parse(new InputSource(new InputStreamReader(in, "UTF-8")));


文章来源: How to read a InputStream with UTF-8?