1

ファイルのエンコーディング形式を別のものに変更したかったのです(どちらでもかまいません)。しかし、結果(ファイルw.txt)でファイルを開くと、内部がめちゃくちゃになります。Windows はそれを正しく理解していません。

Windowsのメモ帳で正しく解釈されるように、どの結果エンコーディング(args [1])を配置する必要がありますか?

 import java.io.*;
import java.nio.charset.Charset;

public class Kodowanie {

    public static void main(String[] args) throws IOException {
        args = new String[2];
        args[0] = "plik.txt";
        args[1] = "ISO8859_2";
        String linia, s = "";
        File f = new File(args[0]), f1 = new File("w.txt");
        FileInputStream fis = new FileInputStream(f);
        InputStreamReader isr = new InputStreamReader(fis,
                Charset.forName("UTF-8"));
        BufferedReader in = new BufferedReader(isr);

        FileOutputStream fos = new FileOutputStream(f1);
        OutputStreamWriter osw = new OutputStreamWriter(fos,
                Charset.forName(args[1]));
        BufferedWriter out = new BufferedWriter(osw);
        while ((linia = in.readLine()) != null) {
            out.write(linia);
            out.newLine();
        }
        out.close();
        in.close();

    }

}

入力:

Ala
ma 
Kota

出力:

?Ala
ma 
Kota

なぜ「?」があるのですか?

4

2 に答える 2

1

US-ASCII は unicode のサブセットです (ちなみにかなり小さいものです)。UTF-8 でファイルを読み取り、US-ASCII で書き戻します。したがって、指定された UTF 文字が縮小された 7 ビット US-ASCII サブセットで表現できない場合、エンコーダは決定を下す必要があります。古典的に、これは ? のようなデフォルトの文字に置き換えられます。

UTF-8 の文字は多くの場合マルチバイトであるのに対し、US-ASCII は 7 ビットの長さしかないことを考慮してください。これは、バイト 127 を超えるすべての Unicode 文字を US-ASCII で表現できないことを意味します。ファイルが変換された後に表示されるクエスチョン マークは、これで説明できます。

同様の質問Reading Strange Unicode Characters in Java に回答しました。おそらくそれは役立ちます。

また、 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)を読むことをお勧めします。

于 2012-10-29T01:32:20.427 に答える
1

Windows のデフォルトのエンコーディングは Cp1252 です。

于 2012-10-29T01:18:52.753 に答える