考えられるエラーの1つは、最初のコードの4行目の「UTF-8」からハイフンを省略していることです。CharSetのドキュメントを参照してください。
それ以外の場合、コードは正しいようです。ただし、もちろん、データがないため、直接テストすることはできません。
比較のために、ここに私が書いた小さなクラスがあります。このクラスは、コードと同様に、「Hamamélis」の例のアクセント付きの「e」を、UTF-8で1つの(正規化されていない)文字に対して期待される2つのオクテット(16進数の「C3」と「A9」)として正しく書き込みます。
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class ReaderWriter {
public static void main(String[] args) {
try {
String content = "Hamamélis. Written: " + new java.util.Date();
File file = new File("some_text.txt");
// Create file if not already existent.
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fileOutputStream = new FileOutputStream( file );
OutputStreamWriter outputStreamWriter = new OutputStreamWriter( fileOutputStream, "UTF-8" );
BufferedWriter bufferedWriter = new BufferedWriter( outputStreamWriter );
bufferedWriter.write( content );
bufferedWriter.close();
System.out.println("ReaderWriter 'main' method is done. " + new java.util.Date() );
} catch (IOException e) {
e.printStackTrace();
}
}
}
icktoofayがコメントしたように、どのオクテットが関係しているかを正確に発見するために、より深く掘り下げる必要があります。今日MacAppStoreで見つけたこの「ファイルビューア」アプリのような16進エディタを使用して、保存したファイルの正確なオクテットを確認します。
オクテットがC3およびA9の場合、問題は、テキストが間違った文字エンコードを使用しているため、ファイルを表示するために使用したテキストエディタにあります。たとえば、そのテキストファイルをWebブラウザで開き、そのメニューコマンドを使用して、ファイルをUTF-8として再解釈できます。
オクテットがC3およびA9でない場合は、さらに戻って入力のオクテットを調べます。
コンピューターのテキストファイルに実際に数字が含まれている(人間の意味でのテキストではない)ことを理解していない場合は、コーディングを中断して、この面白い記事を読んでください
。 (言い訳はありません!)Joel Spolsky