Java是否将0xA0读为0xFFFD

MxL*_*evs -2 java

我的一个数据处理模块在读取ANSI输入时崩溃了.使用十六进制查看器查看有问题的字符串,0xA0结尾处有一个神秘的字节.

结果证明这是一个不间断的空间.

我试过替换它:

String s = s.replace("\u00A0", "");
Run Code Online (Sandbox Code Playgroud)

但它没有用.

然后我去打印出该角色正在使用的内容charAt和Java报告

65533
Run Code Online (Sandbox Code Playgroud)

要么 0xFFFD

将其插入替换代码中,我终于摆脱了它!

但为什么我0xA0在文件中看到了一个,但是Java将其读作0xFFFD?

BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
 String line = r.readLine();
 while (line != null){
     // do stuff
     line = r.readLine();
  }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

U+FFFD是"Unicode替换字符",通常用于表示"在您使用的编码中无法正确解码的某些二进制数据".(有时?用于此,但U + FFFD通常是一个更好的主意,因为它是明确的.)

它的存在通常表明您尝试使用错误的编码.您还没有指定您哪些编码被使用-或者你确实如何使用它-但是这可能是问题.检查您正在使用的编码和文件的编码.请注意,"ANSI"不是编码 - 有许多编码称为ANSI编码,您需要为您的文件选择正确的编码.

  • @Zabri:我很确定基于用户的投票是你不允许投票的唯一方式. (3认同)