inputstream에서 String으로 전환할 때 오류가 발생합니다.
1519 단어 string어지럽다utf-8stringbuilder
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이 혼란스러워질 것이다.다음 하나는 모든 바이트를 다 읽고 같은 장치에서 바꾸면 문자가 뜯기지 않는다는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
알고리즘 파트 3 : 스택을 사용하여 문자열 반전얘들 아. 오늘은 스택을 사용하여 문자열을 뒤집는 방법을 보여드리겠습니다. 이 문제에서 우리는 하나의 문자열을 받았고 스택을 사용하여 그것을 뒤집어야 합니다. 해결책 이것이 도움이 되길 바랍니다. 감사합니다 ❤....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.