gpt4 book ai didi

java - 无法读取任何包含特定字符的文件

转载 作者:行者123 更新时间:2023-11-29 04:23:57 26 4
gpt4 key购买 nike

长话短说

为什么用 读取文件在 Notepad 上找不到任何数据?

问题:

到目前为止,我一直只使用普通的 ol'记事本(版本 6.1)来读/写文本以测试/回答此处的问题。

读取文本文件内容并将其打印到控制台的简单代码:

Scanner sc = new Scanner(new File("myfile.txt"));
while (sc.hasNextLine()) {
String text = sc.nextLine();
System.out.println(text);
}

一切正常,线条按预期打印。

然后,如果我在文本文件的任何地方输入这个精确字符:,它不会读取任何文件,也不会在控制台打印任何内容.

我当然可以使用 Notepad++ 或其他(更好的)文本编辑器,没有问题,文本(包括破折号字符)将按预期打印。

我还可以指定 UTF-8,使用 Notepad,它会正常工作:

File fileDir = new File("myfile.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileDir), "UTF8"));
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
}

在我原来的 Notepad 文件中,如果我将文本(包括 )复制并粘贴到 Notepad++ 中,然后将两个文件与WinMerge,它告诉我 Notepad 上的破折号是 ,但在 Notepad++ 上,它是

问题:

为什么,当这个 Notepad 的文本文件中使用时,它读取nothing,基本上告诉我 hasNextLine () 是假的?它是否应该至少读取包含此特定字符的行之前的输入?

重现步骤:

  • 在 Windows 7 上,右键单击并创建新的文本文档。
  • 在文件中放入任何文本(不包含任何特殊字符)
  • 将这个字符放在文件的任意位置:
  • 运行上面的第一段代码

输出:BUILD SUCCESSFUL(总时间:1 秒),即不打印任何文本。

附言:

我知道我问了一个类似的问题(好吧,结果是一样的)question昨天,但不幸的是,我似乎没有很好地解释自己,或者有些观众没有完全阅读问题。不管怎样,我想我在这里解释得更好。

最佳答案

问题似乎是编码的差异。您必须使用与写入文件相同的编码进行读取。

您的系统记事本可能使用 Windows-1252 (或 Cp-1252)编码。这种编码范围在 128 - 159 之间的字符存在问题。Dash 位于该范围之间。该范围不存在于等效的 ISO 8859-1 中,仅存在于 Cp1252 编码中。

enter image description here

Eclipse 在读取记事本文件时假定文件的编码为 ISO-8859-1(因为它是等效的)。但是这个字符在 ISO-8859-1 中不存在,因此出现了问题。如果你想从 Java 读取,你必须指定 Cp1252,你应该得到你的输出。

这也是为什么当记事本中的文件是用 UTF-8 编写的时,您的 UTF-8 代码可以正常工作的原因。

关于java - 无法读取任何包含特定字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408369/

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