Java - 无法从文本文件中读取特殊字符

时间:2012-02-29 20:13:13

标签: java file input special-characters character

我正在编写一个程序,在另一个字典文本文件(例如A)中搜索文本文件(比如说B)中的单词,以比较不同排序算法的效率。

无论如何,我的问题是当其中一个源文本文件具有特殊字符,例如“μ”。首先,要在Windows中保存带有此类字符的文本文件,记事本说我必须将编码从ANSI更改为其他类似UTF-8的内容。

遇到带有特殊字符的行时,我的程序崩溃了。特别是在使用compareTo方法将该单词与另一个词典文本文件中的单词进行比较时。它崩溃时出现NullPointerException。

我打印出特殊字符,看到“μ”表示为“Âμ”,第一行总是出现奇怪的字符(“”)。

我正在使用扫描仪输入文件:

inputStream = new Scanner (new FileInputStream(args[0]));

我也尝试过FileReader

一般来说,我如何阅读特殊字符或包含特殊字符的单词?这些字符是否可以与内置的compareTo方法兼容,还是我必须找到另一种方式来订购它们?

2 个答案:

答案 0 :(得分:4)

没有ANSI编码,只有ASCII。使用Notepad ++创建正确的UTF-8编码文件。使用reader在Java中打开文件,该文件采用编码。

答案 1 :(得分:2)

待办事项

inputStream = new Scanner(new FileInputStream(args[0]), "UTF-8");

BufferedReader in = new BufferedReader(
        new InputStreamReader(new FileInputStream(args[0]), "UTF-8"));

InputStreams 适用于二进制字节数据,读者适用于带有编码的字符。

似乎文本前面有一个“BOM”字符,零宽度空间,用于将文本标记为UTF-8。这可能已被删除,但Windows无法识别UTF-8。在扫描仪中,您可能希望跳过它。