gpt4 book ai didi

java - 为什么我的字符串返回 "\ufffd\ufffdN a m e"

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:48 48 4
gpt4 key购买 nike

这是我的方法

public void readFile3()throws IOException
{
try
{
FileReader fr = new FileReader(Path3);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
int a =1;
while( a != 2)
{
s = br.readLine();
a ++;

}
Storage.add(s);

br.close();

}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}

出于某种原因,我无法读取仅包含此文件的文件“名称Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz "

当我调试代码时,String s 返回为“\ufffd\ufffdN a m e”,我不知道这些额外字符的来源。这使我无法正确读取文件。

最佳答案

\ufffd 是 unicode 中的替换字符,当您尝试读取 unicode 中没有表示的代码时使用它。我假设您使用的是 Windows 平台(或者至少您阅读的文件是在 Windows 上创建的)。 Windows 支持多种文本文件格式,最常见的是 Ansi:每个字符都表示但它的 ansi 代码。

但 Windows 可以直接使用 UTF16,其中每个字符由其 unicode 代码表示为 16 位整数,因此每个字符 2 个字节。这些文件使用特殊标记(Windows 方言中的字节顺序标记)表示:

  • 文件是用每个字符 2(甚至 4)字节编码的
  • 编码是小端还是大端

(引用:MSDN 上的 Using Byte Order Marks)

当您在前两个替换字符 N a m e 而不是 Name 之后写入时,我想您有一个 UTF16 编码的文本文件。记事本可以透明地编辑这些文件(甚至不用说你的实际格式)但其他工具确实有问题......优秀vim可以读取不同编码的文件并在它们之间进行转换。

如果你想在java中直接使用这种文件,你必须使用UTF-16字符集。来自 Charset 上的 JaveSE 7 javadoc:UTF-16 十六位 UCS 转换格式,由可选字节顺序标记标识的字节顺序

关于java - 为什么我的字符串返回 "\ufffd\ufffdN a m e",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24493220/

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