我试图将'§'字符编译成字符(char c = '§'
),但当我尝试构建时,它在构建输出中说"Unclosed character literal
";和";Illegal character: 'u00a7'
";后面跟着"Unclosed character literal
";再一次。如果我把字符放入字符串(String s = "§"
),它工作得很好。但是当我将它打印到控制台时,它打印了'Â'字符(它不应该)
在另一个java项目中,我可以很好地使用'§'字符并正常编译,并且它按预期工作;将它打印到控制台没有显示任何内容(这很正常,因为它被用作文本着色的转义字符)。那个项目(以及当前的项目)不使用"BOM"在intelllij中,它们都使用UTF8编码
有人知道如何解决这个问题吗?谢谢:)
如何重现这个错误:
- 创建了一个新的
Test.java
与UTF-8编码(默认) - 添加main和
char c = '§';
并打印 - 运行
Test.main()
no errors, as expected.
所以我试了:
- 创建第二个文件
Test1.java
并更改为ISO-8859-1
编码 - 添加main方法,只使用print命令
- 运行
Test1.java
这次我得到了报告的错误,但对于Test.java
(仍然编码为UTF-8)
看起来IDEA对整个源代码使用第一个文件的编码。
解决方案:
- 确保所有文件都使用UTF-8编码;和/或
- 使用
javac -encoding UTF-8 ...
作为saka1029的注释
对于我来说,在编辑时,我看到IDEA可以识别日文字符的消息,我点击OK将默认显示设置为"Encoding windows-31j"。在构建过程中,系统根据"Encoding windows-31j"重新读取文件,导致错误。如何修复:强制IDEA使用UTF-8编码构建,如以下图像
如果UTF8失败,请将其更改为"-encoding utf -16">
使用Java的字符:https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html
您可以通过charValue()检索字符。
另外,请确保您使用的编码方案(例如UTF-16)支持您的字符。