java io BufferedInputStream乱码问题

<div class="it610-blog-content-contain" style="font-size: 14px"></div>

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文件出现中文乱码,因为一个汉字占两个字节,而当中英文混合的时候,有的字符占一个字节,有的字符占两个字节,所以如果直接用BufferedInputStream读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码.所以我们需要用BufferedReader来读取,它读到的是字符,所以不会读到半个字符的情况,不会出现乱码.


参考:http://www.pocketdigi.com/20110805/437.html#more-437

你可能感兴趣的:(java io BufferedInputStream乱码问题)