JAva io BufferedInputStream乱符号化問題
1585 ワード
package com.lynda.files;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class ReadNetworkFile {
public static void main(String[] args) {
StringBuffer sb = null;
try {
URL url = new URL("http://www.sciencenet.cn/xml/news.aspx?news=0");
InputStream in = url.openStream();
//BufferedInputStream buf = new BufferedInputStream(in);
// BufferedReader
BufferedReader reader = new BufferedReader (new InputStreamReader(in));
sb = new StringBuffer();
while(true){
int date = reader.read();
if(date==-1){
break;
}else{
sb.append((char)date);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb);
}
}
ネット上で読み取ったxmlファイルに中国語の文字化けしが発生した.漢字1文字が2バイトで、英語が混在している場合、1バイト、2バイトの文字があるので、BufferedInputStreamで直接バイトを読むと、データが長く、一度も読んでいないうちに、ちょうど1つの漢字の前のバイトを読む可能性が高い.この中国語は文字化けして、後のデータはバイトの位置合わせがないため、すべて文字化けした.そのため、BufferedReaderで読み取る必要があります.それは文字を読んでいるので、半文字も読めず、文字化けしません.
参照先:http://www.pocketdigi.com/20110805/437.html#more-437