当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Java中的"用于编码的不可映射字符"警告》经验,为你挑选了6个好方法。

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



1> 小智..:

试试:javac -encoding ISO-8859-1 file_name.java


@dfrankow:你必须在你的`Build.xml`文件中的适用的``调用下添加``.这是一个糟糕的方法,但你别无选择.请参阅我在顶部的长评论.

2> Jon Skeet..:

使用"\ uxxxx"转义格式.

根据维基百科,版权符号为unicode U + 00A9,因此您的行应为:

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


小心\nNNNNN字符......在进行词法分析之前解析它们.例如,如果将此注释/*c:\ unit*/放到代码中,它将不再编译,因为"nit"不是正确的十六进制数.
@Alan M:根据我的经验,通过将源文件保存为ASCII而不是确保在任何地方使用正确的编码*来确保您不会遇到问题要容易得多*您的源代码可能被编译(Ant, Eclipse,IDEA等).
@Jon,这是Java的一个根本缺陷; Java源单元以UTF-8,ISO 8859-1,CP1252,MacRoman等编码的事实在需要它的源单元外部的元数据处理.这会迫使你记住修复你的ant文件或Eclipse配置等.正如你正确指出的那样,这绝对是最糟糕的做法,因为信息很脆弱而且很容易丢失.将元数据(编码元数据)和数据(读取:源代码)保存在一个地方的语言在这方面更加健壮.这是唯一理智的方法.
这听起来更像是创可贴而不是治疗方法.真正的问题似乎是你告诉javac,当它们真正使用像ISO-8859-1或windows-1252这样的单字节编码时,需要UTF-8中的源文件.
绝对.(这在C#中更好地处理,其中unicode转义仅适用于某些上下文 - 但是那时也存在危险的\ x转义序列,这很糟糕.)

3> Thomas Leona..:

如果您正在使用Maven,请在编译器插件的配置中明确设置,例如


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            2.3.2
            
                UTF-8
            
        


javadoc插件也会抱怨不可映射的角色.最好设置`project.build.sourceEncoding`属性.

4> nightlyop..:

这对我有帮助:

您需要做的就是指定一个名为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/



5> 小智..:

把这行放在Java conf上面的yor文件.gradle中.

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



6> Alupotha..:

大多数情况下,编译错误是在unicode(UTF-8编码)文件编译时出现的

javac -encoding UTF-8 HelloWorld.java

您还可以将此编译选项添加到IDE ex:Intellij idea
(文件>设置> Java编译器)添加为附加命令行参数

在此输入图像描述

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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有