Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决
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 Order 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自建的文件编码,尽量不要从其他地方拷贝代码,手写要复制的代码。
我的博客园地址:https://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址:https://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
最新文章
- 关于DMA和它的仇家
- iOS开发零基础--Swift教程 类型转换
- zepto下加载openbox弹出层
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q51-Q53)
- javascript常量
- 使用twisted.web实现代理服务器
- Linux的服务器初始优化脚本。
- 10个优质PSD文件资源下载
- Hibernate资源
- debian7 编译qtopia错误解决案例
- Microsoft Visual Studio 2013 Update 2 离线安装程序
- SOFTWARE_INTRODUCE_02
- Linux安装中文man手冊
- myeclipse中自己手动配置maven
- OI队内测试一【数论概率期望】
- 如何编写高效的SQL
- python设置虚拟环境
- 【烂笔头】adb命令篇
- python之pickle
- Float.intBitsToFloat
热门文章
- mysql第四篇:数据操作之多表查询
- BZOJ 2285 [Sdoi2011]保密
- 百度链接提交-js代码推送批量推送版
- PyQt5Day03--程序基本结构之面向对象版本+控件学习
- Miller_Rabin素性测试
- 26. docker compose 的安装 和 基本使用
- Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入
- 刷题33. Search in Rotated Sorted Array
- JAVA中如何判断一个输入是数字(小数和整数)还是字符串?
- php IP地址转换