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