我目前正在自学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();
}
答案 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);
祝你好运