我正在编写一个Java项目,在编译时发出以下警告:
/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
我不确定SO会如何在日期之前呈现角色,但它应该是版权符号,并在警告中显示为钻石中的问号。
值得注意的是,角色正确地出现在输出工件中,但警告是令人讨厌的,包含此类的文件可能有一天会被文本编辑器触及,这会错误地保存编码...
如何将此字符注入“copyright”字符串,以便编译器满意,并且该符号保留在文件中而不会出现潜在的重新编码问题?
答案 0 :(得分:88)
尝试: javac -encoding ISO-8859-1 file_name.java
答案 1 :(得分:52)
使用“\ uxxxx”转义格式。
根据Wikipedia,版权符号为unicode U + 00A9,因此您的行应为:
String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
答案 2 :(得分:40)
如果您正在使用Maven,请在编译器插件的配置中明确设置<encoding>
,例如
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
答案 3 :(得分:29)
这对我有帮助:
您需要做的就是指定一个名为的envirnoment变量 JAVA_TOOL_OPTIONS。如果将此变量设置为-Dfile.encoding = UTF8, 每次启动JVM时,它都会获取此信息。
答案 4 :(得分:20)
将此行放在Java conf。上面的yor文件.gradle中。
apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
答案 5 :(得分:7)
大多数情况下,当编译unicode(UTF-8编码)文件
时会出现此编译错误javac -encoding UTF-8 HelloWorld.java
并且您也可以将此编译选项添加到IDE
例如:Intellij的想法
(文件&gt;设置&gt; Java编译器)添加为附加命令行参数
-encoding:编码 设置源文件编码名称,例如EUC-JP和UTF-8 ..如果未指定-encoding,则使用平台默认转换器。 (DOC)
答案 6 :(得分:2)
这对我有用 -
youtube.co.uk/...
答案 7 :(得分:2)
如果您正在使用Gradle,则可以找到应用Java插件的行:
apply plugin: 'java'
然后将编译任务的编码设置为UTF-8:
compileJava {options.encoding = "UTF-8"}
如果您有单元测试,那么您可能也希望使用UTF-8进行编译:
compileTestJava {options.encoding = "UTF-8"}
这意味着整个gradle代码如下所示:
apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
答案 8 :(得分:1)
如果你使用eclipse(即使你编写utf8字符,Eclipse也可以为你输入utf8代码。编程时会看到正常的utf8字符,但后台将是utf8代码);
P.S:如果您在代码中使用静态值,这将没问题。例如String test =“İİİİİııııııççççç”;
答案 9 :(得分:1)
我遇到了同样的问题,java错误消息中报告的字符索引不正确。我把它缩小到双引号字符,就在报告的位置是十六进制094之前(取消而不是引用,但表示为引用)而不是十六进制022.一旦我换掉了十六进制022变体,一切都很好。< / p>
答案 10 :(得分:1)
如果在命令提示符下使用Maven Build,也可以使用以下命令:
mvn -Dproject.build.sourceEncoding=UTF-8
答案 11 :(得分:1)
对于那些想知道为什么在某些系统而不是其他系统(具有相同源,构建参数等)上发生这种情况的人,检查您的LANG
环境变量。我在LANG=C.UTF-8
时收到警告/错误,但在LANG=en_US.UTF-8
时却没有。