如何编译编码为"UTF-8"的java源文件?

ase*_*a38 28 java unicode compiler-errors javac

我保存了我的Java源文件,将其编码类型指定为UTF-8(使用记事本,默认情况下,记事本的编码类型为ANSI),然后我尝试使用以下命令编译它:

javac -encoding "UTF-8" One.java
Run Code Online (Sandbox Code Playgroud)

但它给出了一条错误消息"

One.java:1: illegal character: \65279

?public class One {

^
1 error
Run Code Online (Sandbox Code Playgroud)

还有其他方法,我可以编译吗?

这是来源:

public class One {
    public static void main( String[] args ){
        System.out.println("HI");
    }
} 
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 45

您的文件读为UTF-8,否则有值"65279"字符就绝不可能出现.javac期待你的源代码是在平台默认的编码,根据javac文件:

如果未指定-encoding,则使用平台默认转换器.

十进制65279是十六进制FEFF,它是Unicode字节顺序标记(BOM).在UTF-8中没有必要,因为UTF-8总是被编码为八位字节流并且没有字节序问题.

即使没有必要,记事本也喜欢坚持使用BOM,但有些程序不喜欢找到它们.正如其他人所指出的那样,Notepad不是一个非常好的文本编辑器.切换到不同的文本编辑器几乎肯定会解决您的问题.

  • @Oscar Reyes:记事本不是一个非常文本的编辑器? (20认同)
  • +1:这是另一种选择:使用notepad ++,editplus或consorts,或者,只有你在命令行上很好地掌握编码/构建/运行java,像Eclipse这样的IDE (2认同)
  • 记事本在那里粘贴了一个BOM,以便稍后(或任何其他理解BOM的东西)可以发现该文件很可能是UTF-8. (2认同)

Adr*_*man 20

在Notepad ++中打开文件,然后选择编码 - >转换为UTF-8而不使用BOM.


Eti*_*nat 11

这对你的文本编辑器来说不是问题,这是javac的一个问题!Unicode规范称BOM是UTF-8中的选项,它并不是说它是被禁止的!如果BOM可以存在,那么javac可以处理它,但事实并非如此.实际上,在UTF-8文件中使用BOM对于区分ANSI编码文件和Unicode编码文件很有用.

建议的删除BOM的解决方案只是一种解决方法,而不是正确的解决方案.

此错误报告表明此问题永远不会得到解决:http://bugs.java.com/view_bug.do?video_id = 4508058

由于此主题位于"javac BOM"搜索的前2个谷歌搜索结果中,因此我将此处留给未来的读者.

  • 由于[JDK-6378911](https://bugs.openjdk.java.net/browse/JDK-6378911)影响了预期读取BOM的代码,因此所有UTF-8流的一般Java更改都已恢复.它需要在`javac`本身修复. (2认同)

Ste*_*ins 9

尝试 javac -encoding UTF8 One.java

没有引号,它是UTF8,没有破折号.

有关更多链接,请参阅此论坛帖子


小智 5

参见下文例如,我们可以使用程序进行讨论(泰卢固语)

程序(UnicodeEx.java)

class UnicodeEx {  
    public static void main(String[] args) {   
        double ????? = 10;  
        double ??????? = 25;   
        double ?????_???????_?????????;  
        System.out.println("The Value of Height = "+?????+" and Width = "+???????+"\n");  
        ?????_???????_????????? = ????? * ???????;  
        System.out.println("Area of Rectangle = "+?????_???????_?????????);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

这是程序,同时另存为“ UnicodeEx.java”并将“编码”更改为“ unicode”

**如何编译**

javac -encoding“ unicode” UnicodeEx.java

如何执行

Java UnicodeEx

高度的值= 10.0且宽度= 25.0

矩形面积= 250.0