gpt4 book ai didi

java - 为什么随机访问文件读取  作为我的 UTF-8 文本文件中的第一个字符?

转载 作者:行者123 更新时间:2023-11-30 07:45:03 25 4
gpt4 key购买 nike

一个关于用 Java 读取文本文件的问题。我有一个以 UTF-8 编码保存的文本文件,其中只有以下内容:

你好。世界。

现在我正在使用 RandomAccessFile 来读取此类。但不知为何,文件开头似乎多了一个“看不见”的字符……?

我使用这段代码:

File file = new File("resources/texts/books/testfile2.txt");
try(RandomAccessFile reader = new RandomAccessFile(file, "r")) {

String readLine = reader.readLine();
String utf8Line = new String(readLine.getBytes("ISO-8859-1"), "UTF-8" );
System.out.println("Read Line: " + readLine);
System.out.println("Real length: " + readLine.length());
System.out.println("UTF-8 Line: " + utf8Line);
System.out.println("UTF-8 length: " + utf8Line.length());
System.out.println("Current position: " + reader.getFilePointer());
} catch (Exception e) {
e.printStackTrace();
}

输出是这样的:

Read Line: ?»?Hello. World.
Real length: 16
UTF-8 Line: ?Hello. World.
UTF-8 length: 14
Current position: 16

这些(1 或 2)个字符似乎只出现在最开始。如果我向文件中添加更多行并读取它们,那么所有其他行都会被正常读取。有人可以解释这种行为吗?开头这个字符是什么?

谢谢!

最佳答案

文件中的前 3 个字节(0xef0xbb0xbf)称为 UTF-8 BOM(字节顺序标记)。 BOM 仅对 UTF-16 和 UTF-32 很重要 - 对于 UTF-8 它没有任何意义。 Microsoft 引入它是为了更好地猜测文件编码。

也就是说,并不是所有的UTF-8编码的文本文件都有这个标记,但有些有。

关于java - 为什么随机访问文件读取  作为我的 UTF-8 文本文件中的第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com