尝试编译 Java 代码时的非法字符

2022-09-01 09:36:18

我有一个程序,允许用户在富文本框中键入java代码,然后使用java编译器进行编译。每当我尝试编译我编写的代码时,我都会收到一个错误,说我在代码的开头有一个非法字符,该字符不存在。这是编译器给我的错误:

C:\Users\Travis Michael>"\Program Files\Java\jdk1.6.0_17\bin\javac" Test.java
Test.java:1: illegal character: \187
public class Test
 ^
Test.java:1: illegal character: \191
public class Test
  ^
2 errors

答案 1

BOM 由 File.WriteAllText() 或 StreamWriter 生成,前提是您未指定编码。默认设置是使用 UTF8 编码并生成 BOM。您可以使用其编码命令行选项告诉Java编译器这一点。

阻力最小的路径是避免生成 BOM。为此,请指定 System.Text.Encoding.Default,这将使用操作系统的默认代码页中的字符写入文件,并且不会写入 BOM。使用 File.WriteAllText(String, String, Encoding) 重载或 StreamWriter(String, Boolean, Encoding) 构造函数。

只要确保您创建的文件不会被世界另一个角落的机器编译即可。它将产生莫吉巴克


答案 2

正如大家所说,这是一个字节顺序标记。

javac不理解BOM,即使你尝试这样的东西也是如此。

javac -encoding UTF8 Test.java

您需要去除 BOM 表或将源文件转换为其他编码。Notepad ++可以转换单个文件的编码,我不知道Windows平台上的批处理实用程序。

Java 编译器将假定文件采用平台默认编码,因此,如果您使用此选项,则不必指定编码。


推荐