空指针在表情符号中读取时的异常

时间:2016-11-01 04:38:52

标签: unicode nullpointerexception fileinputstream

我有一个看起来像这样的文本文件:

shooting-stars    "are cool" 

我有一个词法分析器,它使用FileInputStream一次读取一个字符,将这些字符传递给switch语句,返回相应的lexeme。

在这种情况下,表示赋值,因此这种情况通过:

case 'ð' :
            return new Lexeme("ASSIGN");

由于某种原因,文件阅读器在此时停止,即使它尚未处理字符串(或者之后的任何内容),也会返回空指针。任何时候它读入表情符号都会这样做。如果没有表情符号,它会到达文件末尾。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我怀疑问题是字符(Unicode代码点U + 1F4AB)超出了Java在内部表示为单个char值的字符范围。相反,Java将U + FFFF以上的字符表示为两个字符,称为代理项对,在这种情况下为U + D83D,后跟U + DCAB。 (有关详细信息和一些链接,请参阅this thread。)

很难确切地知道您提供的一些代码究竟发生了什么,但我的猜测是您没有正确处理这种情况。您需要调整处理逻辑以处理分成两部分的表情符号。