在java中获取UTF8字符集而不是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

我正在创建ASCII字符集格式的文本文件。再次读取时,其
给出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编码是无法区分的。