Android 가 네트워크 에서 데 이 터 를 가 져 올 때 일부 데이터 난 장 판 해결
문제 설명: 네트워크 에서 html 페이지 를 캡 처 하여 분석 한 결과 일부 중국어 오류 가 발생 한 것 을 발견 하 였 습 니 다.
유래: csdn 클 라 이언 트 를 만 들 때 발생, http://blog.csdn.net/lmj623565791/article/details/23532797 (자바 환경 에서 콘 솔 을 사용 하여 인쇄 하 는 것 은 어 지 러 운 코드 가 없습니다)
서버 에서 읽 은 코드 를 즉시 검사 합 니 다:
/**
* html
*
* @param urlStr
* @return
* @throws CommonException
*/
public static String doGet(String urlStr) throws CommonException
{
StringBuffer sb = new StringBuffer();
try
{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setDoInput(true);
conn.setDoOutput(true);
if (conn.getResponseCode() == 200)
{
InputStream is = conn.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) != -1)
{
sb.append(new String(buf, 0, len, "UTF-8"));
}
is.close();
} else
{
throw new CommonException(" !");
}
} catch (Exception e)
{
throw new CommonException(" !");
}
return sb.toString();
}
제 가 바이트 흐름 으로 네트워크 에서 데 이 터 를 읽 고 1024 개의 바이트 를 읽 을 때마다 읽 은 후에 문자열 로 강제 전환 할 수 있 기 때 문 일 수도 있 습 니 다. 또한 인 코딩 을 UTF - 8 로 사용 하기 때 문 일 수도 있 습 니 다. UTF - 8 은 긴 코드 (영어 1 바이트, 중국어 2 바이트) 이기 때문에 1024 는 특정한 한자 의 절반 (이전 바이트) 을 잘 랐 을 수도 있 습 니 다.그리고 문자열 로 바 뀌 었 을 때 오류 가 발생 합 니 다.유일 하 게 이해 하지 못 하 는 것 은 자바 환경 에서 콘 솔 로 인쇄 하 는 것 은 어 지 러 운 코드 가 없습니다.다른 이해 가 있다 면 댓 글 검토 환영 합 니 다.
따라서 데 이 터 를 읽 는 코드 를 바이트 흐름 에서 문자 흐름 으로 바 꾸 고 수 정 된 코드 는 다음 과 같 습 니 다.
/**
* html
*
* @param urlStr
* @return
* @throws CommonException
*/
public static String doGet(String urlStr) throws CommonException
{
StringBuffer sb = new StringBuffer();
try
{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setDoInput(true);
conn.setDoOutput(true);
if (conn.getResponseCode() == 200)
{
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
int len = 0;
char[] buf = new char[1024];
while ((len = isr.read(buf)) != -1)
{
sb.append(new String(buf, 0, len));
}
is.close();
isr.close();
} else
{
throw new CommonException(" !");
}
} catch (Exception e)
{
throw new CommonException(" !");
}
return sb.toString();
}
문제 해결.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.