Java是否将0xA0读为0xFFFD

时间:2014-10-08 15:57:41

标签: java

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

原来这是不间断的空间。

我试过替换它:

String s = s.replace("\u00A0", "");

但它没有用。

然后我去打印出该角色使用charAt和Java报告

的内容
65533

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();
  }

2 个答案:

答案 0 :(得分:5)

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

它的出现通常表明您尝试使用错误的编码。您还没有指定 使用哪种编码 - 或者实际上您使用它的方式 - 但这可能是问题所在。检查您正在使用的编码以及文件的编码。请注意" ANSI"不是编码 - 有批次编码,称为ANSI编码,您需要为您的文件选择正确的编码。

答案 1 :(得分:0)

你是怎么打开文件的? 如果您使用InputStreamReader(InputStream, CharSet),则可以指定' true'您要打开的文件的charset。如果您没有自己指定charset,则java正在使用您平台的默认字符集。在unix上,这通常是UTF8,而在Windows上它通常是ISO8859。