Java 中的“无法映射的编码字符”警告

我目前正在从事一个 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 将如何在日期之前呈现字符,但它应该是一个版权符号,并且在警告中显示为菱形中的问号。

值得注意的是,字符正确地出现在输出工件中,但是警告是一个麻烦,包含这个类的文件有一天可能会被文本编辑器触碰,从而错误地保存编码..。

如何将此字符注入到“版权”字符串中,以便编译器满意,并且符号保存在文件中而不存在潜在的重新编码问题?

241606 次浏览

使用“ uxxxx”转义格式。

根据 维基百科,版权符号是 unicode U + 00 A9,所以你的行应该是:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";

试试: Javac-编码 ISO-8859-1 file _ name. java

如果您使用 Eclipse (Eclipse 可以为您放置 utf8代码,甚至您可以编写 utf8字符。你会看到正常的 utf8字符时,你编程,但背景将是 utf8代码) ;

  1. 选择 工程项目
  2. 右键单击并选择 物业
  3. 资源小组上选择 资源(右上方菜单在2之后打开)
  4. 你可以看到在 资源小组文本文件编码,选择其他你想要的

PS: 如果您在代码中使用静态值,那么这样做是可行的

我遇到了同样的问题,Java 错误消息中报告的字符索引不正确。我将范围缩小到报告位置为十六进制094(取消而不是引号,但表示为引号)而不是十六进制022之前的双引号字符。只要我交换了十六进制022变体,一切都很好。

如果您正在使用 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>

这对我有帮助:

您所需要做的就是指定一个名为 如果将这个变量设置为-Dfile.coding = UTF8, 每次启动 JVM 时,它都会获取这些信息。

资料来源: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/

在 Unicode (UTF-8编码)文件编译时,大多数情况下都会出现此编译错误

javac -encoding UTF-8 HelloWorld.java

也可以将此编译选项添加到 IDE 中 智慧的想法
(文件 > 设置 > Java 编译器)添加为额外的命令行参数

enter image description here

- 编码: 编码 设置源文件编码名称,如 EUC-JP 和 UTF-8。.如果未指定 -coding,则使用平台默认转换器。(医生)

如果在命令提示符下使用 Maven Build,也可以使用以下命令:

                    mvn -Dproject.build.sourceEncoding=UTF-8

把这一行放在你的文件。

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}

这对我很有效:

<?xml version="1.0" encoding="utf-8" ?>
<project name="test" default="compile">
<target name="compile">
<javac srcdir="src" destdir="classes" encoding="iso-8859-1" debug="true" />
</target>
</project>

梯级阶梯

如果你正在使用 Gradle,那么你可以找到应用 java 插件的行:

apply plugin: 'java'

然后将编译任务的编码设置为 UTF-8:

compileJava {options.encoding = "UTF-8"}

如果您有单元测试,那么您可能也想用 UTF-8编译这些测试:

compileTestJava {options.encoding = "UTF-8"}

整体分级示例

这意味着总体的等级代码应该是这样的:

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}

对于那些想知道为什么这种情况会发生在某些系统上而不是其他系统上(具有相同的源、构建参数等等) ,检查你的 LANG环境变量。我得到的警告/错误时,LANG=C.UTF-8,但不是当 LANG=en_US.UTF-8