anruy - 博客园
文章推薦指數: 80 %
转-java编译时error: illegal character '\ufeff' 的解决 ... 查看了该xxx.java类的属性,才发现玄机所在: 编译有问题的文件属性:(注意最下面 ...
首页
新闻
博问
专区
闪存
班级
我的博客
我的园子
账号设置
简洁模式...
退出登录
注册
登录
anruy
转-java编译时error:illegalcharacter'\ufeff'的解决办法-https://blog.csdn.net/t518vs20s/article/details/80833061
原文链接:https://blog.csdn.net/shixing_11/article/details/6976900
最近开发人员通过SVN提交了xxx.java文件,因发布时该包有问题需要回退,故SCM将该xxx.java文件用editplus打开删除了新添的一行,删除后重新编译打包,却报了如下异常:
java:[1,0]illegalcharacter:\65279
表面看着该文件确实没错,看不出来问题,后来从SVN上更新下代码以后,发现本地也不报错,后来通过Eclipse查看了该xxx.java类的属性,才发现玄机所在:
编译有问题的文件属性:(注意最下面一行ByteOrderMarkisUTF-8(BOM))
编译正常的文件属性:
看来问题出在ByteOrderMarkisUTF-8(BOM)上。
因为看不出来问题,所以用UltraEdit打开两个文件,并用16进制格式显示:
有问题的文件头:
无问题的文件头:
看来有问题的文件头前面多了三个字节EFBBBF。
具体原因如下:
某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF0xBB0xBF,即BOM),它的表示的是Unicode标记(BOM)。
因此要解决这个问题的关键就是把这个标记选项去掉,可按如下方法操作。
首先用editplus打开这个文件,从Doucument菜单中选择PermanetSettings,有三个分类,分别是General,File,Tools.点击File,右边会有一项是UTF-8signature:选择alwaysremovesignature.点击OK。
中文版本的Editplus下操作的菜单结构如下:文档->参数设置->文件->UTF-8签名->总是移除签名->确定,这样就设置了UTF-8格式不需要在文件前面加标记,最后把文件另存为utf-8格式就好了.
相关资料,网上摘抄:
UTF-8以字节为编码单元,没有字节序的问题。
UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。
例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。
如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?Unicode规范中推荐的标记字节顺序的方法是BOM。
BOM不是“BillOfMaterial”的BOM表,而是ByteOrderMark。
BOM是一个有点小聪明的想法:在UCS编码中有一个叫做"ZEROWIDTHNO-BREAKSPACE"的字符,它的编码FEFF。
而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。
UCS规范建议我们在传输字节流前,先传输字符"ZEROWIDTHNO-BREAKSPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。
因此字符"ZEROWIDTHNO-BREAKSPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。
字符"ZEROWIDTHNO-BREAKSPACE"的UTF-8编码是EFBBBF(读者可以用我们前面介绍的编码方法验证一下)。
所以如果接收者收到以EFBBBF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
原来BOM是在文件的开始加了几个字节作为标记。
扩展阅读:
UTF-8,UTF-16,UTF-32&BOM:http://www.unicode.org/faq/utf_bom.html#BOM
W3C官方说明:http://www.w3.org/International/questions/qa-utf8-bom
postedon
2019-04-1119:00
anruy
阅读(507)
评论(0)
编辑
收藏
举报
刷新评论刷新页面返回顶部
导航
Poweredby:
博客园
Copyright©2022anruy
Poweredby.NET6onKubernetes
延伸文章資訊
- 1Byte Order Mark in java file – IDEs Support (IntelliJ Platform)
Error:(1, 1) java: illegal character: '\ufeff' Error:(1, 10) java: class, interface, or enum expe...
- 2java编译时error: illegal character '\ufeff' 的解决办法 - CSDN
原文链接:https://blog.csdn.net/shixing_11/article/details/6976900最近开发人员通过SVN提交了xxx.java文件,因发布时该包有问题需要...
- 3anruy - 博客园
转-java编译时error: illegal character '\ufeff' 的解决 ... 查看了该xxx.java类的属性,才发现玄机所在: 编译有问题的文件属性:(注意最下面 ...
- 4Error: (1, 1) java: Illegal character:'\ufeff' [How to Solve]
When opening the eclipse java project compiling with IDEA, the following error occurred: Error:(1...
- 5Error:(1, 1) java: 非法字元: '/ufeff' - 程式人生