2

htmlをtxtファイルに保存するJavaコードを作成する必要があります。

問題は、UTF-8の特殊文字が壊れていることです。

「Hamamélis」のような単語は、このように「Hamam�lis」として保存されます。

私が書いたコードはそこにリストされています:

    URLConnection conn;
                    conn = site.openConnection();
                    conn.setReadTimeout(10000);
                    Charset charset = Charset.forName("UTF8");
                    BufferedReader in = new BufferedReader( new InputStreamReader(  conn.getInputStream(), "UTF-8"   )   );
                    buff = in.readLine();

以降:

out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(Nome), "UTF-8"));
out.write(buff);
out.close();

誰でも私に解決策を提案できますか?

4

1 に答える 1

2

考えられるエラーの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

于 2012-09-01T06:58:48.187 に答える