更改文件编码后Windows出错了

时间:2012-10-29 01:15:06

标签: java encoding

我想将文件的编码格式更改为另一个(无关紧要)。 但是当我打开带有结果的文件(文件w.txt)时,它内部混乱了。 Windows不理解它是正确的。

我应该放什么结果编码(args [1])所以它会被Windows记事本正确解释?

 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

为什么会有'?'

2 个答案:

答案 0 :(得分:1)

Windows中的默认编码是Cp1252。

答案 1 :(得分:1)

US-ASCII是unicode的一个子集(顺便说一下,它是一个非常小的一个)。您正在读取UTF-8中的文件,然后以US-ASCII格式将其写回。因此,当给定的UTF字符不能用减少的7位US-ASCII子集表示时,编码器必须采取一种方法。可悲的是,这是由默认的字符,如?

考虑到UTF-8中的字符在许多情况下是多字节的,而US-ASCII只有7位长。这意味着字节127以上的al 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!)