在Java中,每次从文本文件读取8位
因此,我已经有了一个类,每当我调用read()方法时,它都会从文件中读取8位。所有字符对应的十进制数都在ASCII表中。 现在我遇到了一个字符“É”,它的ASCII码二进制码是11001001。当我打电话时,结果是正确的在Java中,每次从文本文件读取8位,java,file,inputstream,binaryfiles,bit,Java,File,Inputstream,Binaryfiles,Bit,因此,我已经有了一个类,每当我调用read()方法时,它都会从文件中读取8位。所有字符对应的十进制数都在ASCII表中。 现在我遇到了一个字符“É”,它的ASCII码二进制码是11001001。当我打电话时,结果是正确的 System.out.println(Integer.toBinaryString('É')); 但是,当我以二进制格式打开文件时,实际位是11000011000100100001010。我知道00001010是一个换行符。但11000011和10001001肯定与11001
System.out.println(Integer.toBinaryString('É'));
但是,当我以二进制格式打开文件时,实际位是11000011000100100001010。我知道00001010是一个换行符。但11000011和10001001肯定与11001001不匹配。我更改了文件,使其仅包含“a”,现在该文件仅包含a的0110001,这是正确的。字符编码是UTF-8。这是我的代码,用于将字符及其频率放入地图
while ((bit = readInputStream()) != -1) {
if (!bitOccurrence.containsKey(bit))
bitOccurrence.put(bit, 1);
else
bitOccurrence.put(bit, bitOccurrence.get(bit) + 1);
}
下面是私有readInputStream方法
private int readInputStream() throws IOException {
InputStreamReader r = new InputStreamReader(i); // i is the InputStream
return r.read();
}
因此,我的问题是,如果每次只能读取8位,这个问题是如何发生的,解决这个问题的方法是什么?文本文件的字符编码是什么。您使用哪个工具来编辑它?首先,为什么要使用配置了适当字符编码的读卡器以字节的形式读取文本,而不是以字符的形式读取文本?我相信它是UTF8,我正在vim中编辑它。我将其读取为字节,因为我只提供了一个修改过的InputStream类来读取文件,并且它只有read bits方法。请使用InputStreamReader包装您的InputStream。这确实是UTF8,这是一个经典的X对Y问题。你真正想要实现什么?从流中读取位不能是您的主要目标。而您的代码是?如果您想让我们解释为什么它不能按预期工作,请发布您的代码。我们不是额外的lucif向导。文本文件的字符编码是什么。您使用哪个工具来编辑它?首先,为什么要使用配置了适当字符编码的读卡器以字节的形式读取文本,而不是以字符的形式读取文本?我相信它是UTF8,我正在vim中编辑它。我将其读取为字节,因为我只提供了一个修改过的InputStream类来读取文件,并且它只有read bits方法。请使用InputStreamReader包装您的InputStream。这确实是UTF8,这是一个经典的X对Y问题。你真正想要实现什么?从流中读取位不能是您的主要目标。而您的代码是?如果您想让我们解释为什么它不能按预期工作,请发布您的代码。我们不是特别清醒的巫师。