读入表情空指针异常
Null pointer Exception in the case of reading in emoticons
我有一个如下所示的文本文件:
shooting-stars "are cool"
我有一个词法分析器,它使用 FileInputStream 一次读取一个字符,将这些字符传递给 returns 相应词素的 switch 语句。
在本例中,代表赋值所以本例通过:
case 'ð' :
return new Lexeme("ASSIGN");
出于某种原因,文件 reader 在该点停止,返回空指针,即使它尚未处理字符串(或 之后的任何内容)。每当它读入表情符号时,它都会执行此操作。如果没有表情符号,它会到达文件末尾。有任何想法吗?
我怀疑问题在于字符(Unicode 代码点 U+1F4AB)超出了 Java 在内部表示为单个 char
值的字符范围。相反,Java 将 U+FFFF 以上的字符表示为两个字符,称为 代理对 ,在本例中为 U+D83D,后跟 U+DCAB。 (有关更多信息和一些链接,请参阅 this thread。)
很难确切知道您提供的一小段代码发生了什么,但我猜您没有正确处理这种情况。您将需要调整您的处理逻辑以处理分两部分到达的表情符号。
我有一个如下所示的文本文件:
shooting-stars "are cool"
我有一个词法分析器,它使用 FileInputStream 一次读取一个字符,将这些字符传递给 returns 相应词素的 switch 语句。
在本例中,代表赋值所以本例通过:
case 'ð' :
return new Lexeme("ASSIGN");
出于某种原因,文件 reader 在该点停止,返回空指针,即使它尚未处理字符串(或 之后的任何内容)。每当它读入表情符号时,它都会执行此操作。如果没有表情符号,它会到达文件末尾。有任何想法吗?
我怀疑问题在于字符(Unicode 代码点 U+1F4AB)超出了 Java 在内部表示为单个 char
值的字符范围。相反,Java 将 U+FFFF 以上的字符表示为两个字符,称为 代理对 ,在本例中为 U+D83D,后跟 U+DCAB。 (有关更多信息和一些链接,请参阅 this thread。)
很难确切知道您提供的一小段代码发生了什么,但我猜您没有正确处理这种情况。您将需要调整您的处理逻辑以处理分两部分到达的表情符号。