尝试编译java代码时非法字符

muc*_*g12 23 java javac

我有一个程序,允许用户在富文本框中键入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
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 17

当您未指定编码时,BOM由File.WriteAllText()或StreamWriter生成.默认设置是使用UTF8编码并生成BOM.您可以使用-encoding命令行选项告诉java编译器.

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

只需确保您创建的文件不会被世界另一个角落的计算机编译.它会产生mojibake.


zne*_*neo 14

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

javac不了解BOM,即使你尝试类似的东西也没有

javac -encoding UTF8 Test.java
Run Code Online (Sandbox Code Playgroud)

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

java编译器将假定该文件采用您的平台默认编码,因此如果您使用此编码,则不必指定编码.


Boz*_*zho 6

  1. 如果使用 IDE,请指定 java 文件编码(通过属性面板)
  2. 如果不使用 IDE,请使用高级文本编辑器(我可以推荐Notepad++)并将编码设置为“无 BOM 的 UTF”或“ANSI”(如果适合您)。


Ing*_*ngo 5

在这种情况下,请执行以下步骤 1-7

在 Android Studio 中

1. Menu -> Edit -> Select All
2. Menu -> Edit -> Cut
Run Code Online (Sandbox Code Playgroud)
  1. 打开新的记事本.exe

在记事本中

4. Menu -> Edit -> Paste
5. Menu -> Edit -> Select All
6. Menu -> Edit -> Copy 
Run Code Online (Sandbox Code Playgroud)

回到 Android Studio

7. Menu -> Edit -> Paste
Run Code Online (Sandbox Code Playgroud)