inputstream에서 String으로 전환할 때 오류가 발생합니다.

public String getWeatherJson(InputStream is) {
        StringBuilder builder = new StringBuilder();
        InputStream is = null;   
        try {               
            byte[] b = new byte[2048];
            for (int n; (n = is.read(b)) != -1;) {
                builder.append(new String(b, 0, n, "UTF-8"));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return builder.toString();
}

출력에 인코딩이 존재하지만 한두 글자만 인코딩됩니다.하지만 상술한 방법을 통해 파일을 복사하면 정상이다.
정상으로 표시되는 방법은 다음과 같습니다.
public static String fromIputStreamToString(InputStream is){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i = -1;
        try {
            while ((i = is.read()) != -1) {
                baos.write(i);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return baos.toString();
}

2048 바이트를 한 번에 읽으면 중국어 문자가 끊어집니다.첫 번째 바이트와 마지막 바이트는 모두 완전하지 않을 수도 있다.
매번 2048개의 바이트를 다 읽은 후에 이 바이트가 바로 몇 개의 중국어 문자가 뒤에 있는 중국어 문자를 뜯어낼 수 있다는 것을 장담할 수 없다. 이렇게 하면 new String (b, 0, n, UTF-8) 으로string으로 전환하면string이 혼란스러워질 것이다.다음 하나는 모든 바이트를 다 읽고 같은 장치에서 바꾸면 문자가 뜯기지 않는다는 것이다.

좋은 웹페이지 즐겨찾기