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