使用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
相关产品推荐
相关产品推荐

