这个问题经常遇到,这里告诉大家问题的根本,也是解决问题的根本。一个文件流必须用和它的编码类型完全一致的输入流去接收才不会产生乱码。如果不说明编码类型,java默认都是按照iso-8859-1进行编码的。而我们的页面编码类型往往是gb2312或者utf-8,所以必须指明编码类型才不会出现乱码。具体操作也不难,只要按照以下两个步骤即可:

[b]第一:必须确定文件流的编码类型。[/b]
[b]第二:用和文件流编码类型相同的InputStreamReader去读取这个文件流。[/b]

例如:我们有一段网页获得文件流,那页面源码会非常明确的告诉您该流的类型,如下显示:

<html>
<head>
<meta http-equiv=content-type content="text/html; charset=gb2312">
......




这段文字告诉我们文件流编码是gb2312格式。这样我们的[b]InputStreamReader即文件流读取类[/b]也需要时gb2312格式,如下:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class Test001 {
	public static void main(String[] args) throws IOException {
		// 定义一个url类的实例。
		URL url = new URL("http://www.baidu.com");
		// 以特定格式读取文件流。
		InputStreamReader isr = new InputStreamReader(url.openStream(),
				"gb2312");
		BufferedReader br = new BufferedReader(isr);
		String s;
		while (null != (s = br.readLine())) {
			System.out.print(s);
		}
	}
}




明白了上面的道理,在读取任何流的时候都都会是乱码了。



另外运行上面的代码,您还会获得一个效果:在本地打印baidu首页的源码。