Eclipse中SyntaxerrorontokenInvalidCharacter,de。。。
  eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“⽆效字符”上的语法错误,删除此令牌)的错误提⽰,看代码是完全没有问题,上⽹查了半天发现遇到这个问题的好像不太多,总结⼀下问题原因和解决⽅案:
1、看到这个提⽰⾸先想到的是标点符号是不是中⽂,或者全⾓半⾓的问题了,通过检查,这种问题并不存在。
2、然后看到⼀个帖⼦说⽤Android Studio引⼊eclipse项⽬时遇到了同样的错误,原因是eclipse和idea对同样编码utf-8的细节不⼀致,⼀个有BOM,⼀个没有。
3、什么是BOM呢?
  BOM的全称是:Byte Order Mark(字节顺序标记)。UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解析⼀个UTF-16⽂本前,⾸先要弄清楚每个编码单元的字节序。例如:收到⼀个“奎”的Unicode编码是594E,“⼄”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“⼄”?
  Unicode规范中推荐的标记字节顺序的⽅法是BOM。BOM不是“Bill Of Material”的BOM表,⽽是Byte Ord
er Mark(字节顺序标记)。在UCS编码中有⼀个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。⽽FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"⼜被称作BOM。
  我们使⽤Notepad++,当我们选择【编码(N)】时,会出现编码的选项,如下图所⽰:
4、UTF-8不需要BOM来表明字节顺序,但可以⽤BOM来表明编码⽅式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
5、通过UE查看⽂件的16进制形式,发现开头包含EF BB BF串,eclipse不对其做识别⽽作为普通的字符处理,因此报错。
6、问题定位到该怎么解决呢?解决⽅法如下:
  1)使⽤UE或者其他⽂本⼯具,将有问题的java⽂件另存为UTF-8,⽆BOM编码的格式,替换原来的java⽂件。
  2)使⽤eclipse⾃建的⽂件编码,尽量不要从其他地⽅拷贝代码,⼿写要复制的代码。
syntaxerror是什么错误