更改编码Windows的文件后,弄错了



我想将文件的编码表单更改为另一个(什么都没关系)。但是,当我用结果打开文件(文件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

为什么有一个'?'

Windows中的默认编码为CP1252。

us-ascii是Unicode的一个子集(顺便说一句,很小的一个)。您正在阅读UTF-8中的文件,然后将其写回US-ASCII。因此,当给定的UTF字符不能用减少的7位US-ASCII子集表示时,您的编码器将必须进行干燥。从浮标上讲,这是由默认的Charcter撤回的,就像?。

考虑到UTF-8中的字符在许多情况下是多型的,而US-ASCII只有7位长。这意味着在US-ASCII中不能表达上述字节127上方的Al Unicode字符。这可以解释一旦文件转换后,您会看到的问号。

我回答了一个类似的问题,请阅读Java中的奇怪的Unicode字符。也许有帮助。

我还建议您绝对阅读每个软件开发人员的绝对最低限度,因此,必须了解Unicode和字符集(没有借口!)。

相关内容

最新更新