FileInputStream的读取方法不断返回194

时间:2019-08-25 20:29:19

标签: java

我目前正在自学Java IO,并且能够从.txt文件读取基本ASCII字符,但是当我到达其他Latin-1或255范围内的字符时,它将打印为194,而不是正确的字符十进制数。

例如,我可以从txt文件中读取abcdefg,但是如果我输入诸如©的字符,我不会得到169,则由于某种原因我会得到194。我尝试通过仅打印1-255之间的所有字符来测试这一点。循环,但可行。读这篇文章似乎并没有……所以我有些困惑。我了解我可以使用阅读器对象或其他任何对象,但我想首先通过学习字节流来介绍基础知识。这是我所拥有的:

InputStream io = null;
        try{
            io = new FileInputStream("thing.txt");
            int yeet = io.read();
            System.out.println(yeet);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

2 个答案:

答案 0 :(得分:1)

UTF-8 encoding table and Unicode characters

您可以在此处看到©的十六进制代码为c2 a9,即194 169。看来您的文件中有Big Endian Endian Endianness,并且您读取的第一个字节为194

PS Read a file character by character/UTF8,这是Java编码,代码点等的另一个很好的例子。

答案 1 :(得分:0)

我为您提供一些解决方案。

第一个解决方案
对此site的书有充分的了解

第二个解决方案
我为您提供了示例代码

public class Example {
   public static void main(String[] args) throws Exception {
      String str = "hey\u6366";
      byte[] charset = str.getBytes("UTF-8");
      String result = new String(charset, "UTF-8");
      System.out.println(result);
   }
}

输出:

  

嘿捦

让我们了解以上程序。首先,我们使用getBytes()方法

将给定的Unicode字符串转换为UTF-8,以供将来验证
String str = "hey\u6366";
byte[] charset = str.getBytes("UTF-8")

然后我们通过如下创建新的String对象,将字符集字节数组转换为Unicode

String result = new String(charset, "UTF-8");
System.out.println(result);

祝你好运