You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用javac编译Java文件时出现'\ufeff'非法字符错误求助

解决JDK 1.8 javac编译时的\ufeff非法字符错误

你遇到的这个问题其实很常见——你的Main.java文件开头隐藏了UTF-8 BOM(字节顺序标记),而JDK 1.8的javac编译器默认不识别这个标记,把它当成了非法字符\ufeff,这才导致后续的package声明也跟着报错(编译器把BOM当成了代码的一部分,自然认不出后面的package关键字)。

下面给你几个实用的解决方法:

  • 用文本编辑器去除BOM
    大部分主流编辑器都支持保存为「无BOM的UTF-8」格式:

    • Notepad++:打开文件后,点击顶部菜单栏的「编码」→「转为UTF-8无BOM编码格式」,然后保存即可。
    • VS Code:点击右下角的编码显示(比如当前显示「UTF-8」),选择「通过编码保存」,然后选「UTF-8」(注意不要选带「BOM」的选项)。
    • 其他编辑器(如Sublime Text)同理,找到「UTF-8 without BOM」的保存选项就行。
  • 用命令行工具快速处理
    如果编辑器操作不方便,可以用PowerShell命令直接去除BOM:

    Get-Content Main.java -Encoding UTF8 | Set-Content -Encoding UTF8 Main.java
    

    这条命令会读取文件并以无BOM的UTF-8格式重新写入。

  • 验证BOM是否已去除
    你可以用PowerShell命令查看文件开头的字节,确认BOM是否被移除:

    Get-Content Main.java -Encoding Byte | Select-Object -First 3 | ForEach-Object { [System.BitConverter]::ToString($_) }
    

    如果输出是EF BB BF,说明还有BOM;如果是70 61 63(对应package的前三个字符),就说明BOM已经成功去掉了。

补充一句:Java 9及以后版本的javac已经支持UTF-8 BOM了,但你用的是JDK 1.8,所以必须手动去除BOM才能正常编译。

内容的提问来源于stack exchange,提问作者Planet Appsoft Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:33