テストコード:
/**
package com.jwen;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author jwen
*
*/
public class TestFileReaderAndWriter {
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("e:/file.txt");
} catch (FileNotFoundException e) {
System.out.println("the file isn't found!");
return;
}
try {
fw = new FileWriter("e:/file1.txt");
} catch (IOException e) {
System.out.println("the file read or write errors !");
return;
}
int c = -1;
try {
while((c = fr.read()) != -1) {
fw.write(c); //写进文件的也可能是乱码
System.out.print((char)c); //如果你的系统不是中文的(比如英文)显示出的文字可能会是乱码
}
fw.flush();
} catch (IOException e) {
System.out.println("the file read or write errors !");
} finally {
try {
fr.close();
fw.close();
} catch (IOException e) {
System.out.println("the file close errors !");
}
}
}
}
理由:
あなたのデフォルトのファイルエンコードはANSIが符号化されています。
これにより、GB2312、BIG5、JIS及びその他のそれぞれのコーディング標準を作成し、異なる規格を開発するためにさまざまな国と地域。2つのバイトこれらの使用は、呼び出されたANSIコードを拡張漢字文字エンコーディングのさまざまな表現します。簡体字中国語システムでは、ANSI GB2312符号化の符号化表現は、日本語OSで、ANSIは、JISコードの表現を符号化されました。
情報交換の国際的、あなたは二つの言語のテキストに属することはできません異なるANSIエンコーディング、間の互換性のない、テキストがエンコードされたANSIの同期間に保存されています。
お使いのシステムは、非中国人である場合は、あなたのコードは、適切なANSIに対応しています。ファイルが中国読み込まれると、文字化けします。別のファイルをしてFileWriterによって書かれている場合は、当然、それは文字化けします。(問題は読書にあるので)
ソリューション:
別のノードトランスコードストリームFileInputStreamに1。
InputStreamReaderのISR =新しいInputStreamReaderの(新しいFileInputStreamを(ファイル)、 "GBK"); //或GB2312、GB18030
BufferedReaderのは=新しいをBufferedReader(ISR)を読みます。
TXTファイルは、符号化セットに保存されることができるようにFileReaderの2は、(例えば、UTF-8のような)は、共通のファイルのエンコーディングに読み取ることができ、使用しなければなりません。書いた後、表示が正常でお読みください。
---------------------
著者:superjacksonの
出典:CSDN
オリジナルます。https://blog.csdn.net/w304807481/article/details/8151953
免責事項:この記事ブロガーのオリジナルの記事、複製など、ボーエンのリンクを添付してください!