我有一个程序,允许用户在富文本框中键入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编译器将假定该文件采用您的平台默认编码,因此如果您使用此编码,则不必指定编码.
在这种情况下,请执行以下步骤 1-7
在 Android Studio 中
1. Menu -> Edit -> Select All
2. Menu -> Edit -> Cut
Run Code Online (Sandbox Code Playgroud)
在记事本中
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)