1

我想将文件的编码形式更改为另一个(不管哪个)。但是,当我打开带有结果的文件(文件 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

为什么有一个'?

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。也许它有帮助。

我还建议您阅读每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

于 2012-10-29T01:32:20.427 回答
1

Windows 中的默认编码是 Cp1252。

于 2012-10-29T01:18:52.753 回答