ファイルストリーム読み取りファイルの文字化けしの正しい解決策


この問題はよく出会って、ここでみんなに問題の根本を教えて、問題を解決する根本です.1つのファイルストリームは、文字化けして発生しないように、その符号化タイプと完全に一致する入力ストリームで受信しなければならない.符号化タイプを説明しない場合、javaのデフォルトはiso-8859-1に従って符号化されます.一方、私たちのページ符号化タイプはgb 2312またはutf-8であることが多いので、符号化タイプが文字化されないことを示す必要があります.具体的な操作も難しくありません.以下の2つの手順に従えばいいです.
第一に、ファイルストリームの符号化タイプを決定する必要があります.
第二に、このファイルストリームをファイルストリーム符号化タイプと同じInputStreamReaderで読み出す.
たとえば、ファイルストリームを取得するページがあります.そのページのソースコードは、次のようにストリームのタイプを明確に示します.

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

このテキストは、ファイルストリーム符号化がgb 2312フォーマットであることを示しています.こうして僕らの
InputStreamReader、すなわちファイルストリーム読み出しクラスも必要とされる場合gb 2312フォーマットは、以下の通りである.

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のトップページのソースコードをローカルに印刷する効果も得られます.
記事のアドレス:
http://javapub.iteye.com/blog/719523