Java中的“用于编码的不可映射字符”警告

时间:2009-01-21 11:17:37

标签: java encoding utf-8 ascii

我正在编写一个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”字符串,以便编译器满意,并且该符号保留在文件中而不会出现潜在的重新编码问题?

12 个答案:

答案 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时,它都会获取此信息。

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

答案 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编译器)添加为附加命令行参数

enter image description here

  

-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示例

这意味着整个gradle代码如下所示:

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

答案 8 :(得分:1)

如果你使用eclipse(即使你编写utf8字符,Eclipse也可以为你输入utf8代码。编程时会看到正常的utf8字符,但后台将是utf8代码);

  1. 选择项目
  2. 右键单击并选择属性
  3. 资源面板上选择资源(在2之后打开的右侧菜单顶部。)
  4. 您可以在资源面板文本文件编码中看到,选择您想要的其他
  5. 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时却没有。