gpt4 book ai didi

java - 尝试读取文本文件时输出错误

转载 作者:行者123 更新时间:2023-11-29 07:40:12 25 4
gpt4 key购买 nike

我想读取文本文件并将其打印到控制台,所以我用下面的代码做到了这一点

File file = new File("G:\\text.txt");
FileReader fileReader = new FileReader(file);
int ascii = fileReader.read();

while (ascii != -1)
{
result = result + (char) ascii;
ascii = fileReader.read();
}
System.out.println(result);

虽然我得到了正确的结果,但在某些情况下我会得到一些奇怪的结果。假设我的文本文件中包含以下文本:

Hello to every one

为了拥有一个文本文件,我使用了记事本,当我更改编码模式时,我的代码会得到奇怪的输出。

安西:大家好

Unicode : ÿþh e l l o to e v e r y o n e

Unicode big endian:þÿ h e l l o to e v e r y o n e

UTF-8:向大家问好

为什么我会得到这些奇怪的输出?我的代码有问题吗?或者还有其他原因

最佳答案

您的文件以 byte-order mark 开头(U+FEFF)。它应该只出现在文件的第一个字符中——它并没有被广泛使用,但各种 Windows 工具确实包含它,包括记事本。您可以从第一行的开头删除它。

顺便说一句,我强烈建议不要使用FileReader - 它不允许您指定编码。我会使用 Files.newBufferedReader,并指定编码或让它默认为 UTF-8(而不是 FileReader 使用的系统默认编码)。当您使用 BufferedReader 时,您也可以使用 readLine() 一次读取一行:

 String line;
while ((line = reader.readLine()) != null) {
System.out.println(line.replace("\uFEFF", ""));
}

如果您真的想要一次读取一个字符,那么值得养成使用 StringBuilder 的习惯,而不是在循环中重复字符串连接。另请注意,您的 ascii 变量名称具有误导性:它实际上是 UTF-16 代码单元,可能是也可能不是 ASCII 字符。

您指定的编码应与用于写入文件的编码相匹配 - 此时您应该看到正确的输出,而不是在使用 Unicode 和 Unicode big endian 时每个“真实”字符之间的额外字符。

关于java - 尝试读取文本文件时输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30995004/

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