美文网首页Java
Linux下Java编译错误:illegal character

Linux下Java编译错误:illegal character

作者: Everlin | 来源:发表于2017-11-19 11:36 被阅读0次

    同事在Jenkins上打包时遇到一个错误:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project cpo: Compilation failure: Compilation failure:
    [ERROR] /root/.jenkins/workspace/cpo-uat/src/main/java/com/linkgoo/cpo/module/worktable/entity/AChinaBuyPlan.java:[1,1] illegal character: '\ufeff'
    [ERROR] /root/.jenkins/workspace/cpo-uat/src/main/java/com/linkgoo/cpo/module/worktable/entity/AChinaBuyPlan.java:[1,10] class, interface, or enum expected
    [ERROR] -> [Help 1]
    

    乍一看是代码里出现了非法字符,可是 \ufeff 这明显不是中文之类的字符啊。联想到UTF8的BOM头是 EF BB BF, 网上搜了一下,UTF16大端顺序即为FE FF。故猜想是由于同事在编写代码时编码设置的问题。

    BOM全名是Byte Order Mark,中文译作“字节顺序标记”。在这里找到一段关于 BOM 的说明:

    在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。

    解决办法

    针对上边编译错误的问题,解决方法其实很简单,只要把BOM头删掉就好了。Linux下可以这么操作:

    vi -b AChinaBuyPlan.java
    

    然后可以看到文件头有<FEFF>的字样,把它删掉即可。

    Windows下需要借助工具去处理,比如Notepad++,打开文件后,菜单栏->编辑->转为UTF-8无BOM格式。

    相关文章

      网友评论

        本文标题:Linux下Java编译错误:illegal character

        本文链接:https://www.haomeiwen.com/subject/tgpuvxtx.html