在java中获取UTF8字符集而不是ASCII
我正在创建ASCII字符集格式的文本文件。再次读取时,其在java中获取UTF8字符集而不是ASCII,java,encoding,utf-8,character-encoding,Java,Encoding,Utf 8,Character Encoding,我正在创建ASCII字符集格式的文本文件。再次读取时,其 给出UTF8字符集。为什么它给出UTF8字符集而不是ASCII public static void fileStreamWriter() throws IOException { Charset cs = Charset.forName("US-ASCII"); System.setProperty("file.encoding", "US-ASCII"); String text = "ABCDEFGHIJKL
给出UTF8字符集。为什么它给出UTF8字符集而不是ASCII
public static void fileStreamWriter() throws IOException {
Charset cs = Charset.forName("US-ASCII");
System.setProperty("file.encoding", "US-ASCII");
String text = "ABCDEFGHIJKLMNOP";
String stCr = new String(text.getBytes());
Writer writer = new OutputStreamWriter(new
FileOutputStream("C:/upload/FItest"), cs);
try {
writer.write(stCr);
writer.flush();
} finally {
writer.close();
}
}
public static void readEncodingCharset(String path) throws IOException
{
System.setProperty("file.encoding", "US-ASCII");
FileInputStream fis = null;
InputStreamReader isr = null;
String s;
try {
fis = new FileInputStream("C:/upload/FItest");
isr = new InputStreamReader(fis);
s = isr.getEncoding();
System.out.println("Charset Encoding type : "+s);
} catch (Exception e) {
e.printStackTrace();
} finally {
fis.close();
isr.close();
}
}
删除
System.setProperty
行,它们是无用的,不会按照您的想法执行
由于您没有在InputStreamReader
构造函数中指定编码,因此使用了平台默认值,在您的示例中,它似乎是UTF-8
。将“US-ASCII”作为参数添加到InputStreamReader
InputStreamReader
不猜测编码。它使用平台默认值,除非您进行不同的指定,并且您应该始终明确指定编码,以确保程序在不同的平台上工作相同。有点困惑…为什么文件输出流的路径是“C:/upload/FItest”,而文件输入流的路径是“C:/amex/upload/FItest”?同样令人困惑的是:如果以ASCII编码创建文件,那么它应该只包含ASCII字符(即代码点在[0x00..0x7F]范围内的字符),但是完全由该范围内的字符组成的任何字符串的UTF-8编码与相同字符串的ASCII编码是无法区分的。