2009-01-21 33 views
94
警告

我目前工作正发出如下警告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."; 

我不知道怎么之前将会使得字符日期,但它应该是版权符号,并在警告中显示为钻石中的问号。

值得一提的是,字符出现在输出神器正确,但警告是滋扰和含有此类文件可能有一天通过,节省了编码错误的文本编辑器被触动......

我怎样才能将这个字符注入到“版权”字符串中,以便编译器很高兴,并且该符号被保存在文件中而没有潜在的重新编码问题?

+0

感兴趣的其实知道什么个字节组成,版权字符,即'hexdump都AppDBCore.java`我有点怀疑它的`\ u00a9`,而是东西由于您的系统设置,部分适用于您。上面的问号用于替换Unicode值中未知或不可表示的传入字符。http://hexutf8.com/?q=c2a9efbfbd20323030332d32303038204d7920436f6d70616e792e20416c6c207269676874732072657365727665642e – jar 2016-09-09 21:28:03

回答

48

使用“\ uxxxx”转义格式。

Wikipedia,版权符号是unicode U + 00A9所以你行应为:

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

请注意\ nNNN个字符......在进行词法分析之前先对其进行解析。例如,如果您将此注释/ * c:\ unit * /添加到您的代码中,它将不再编译,因为“nit”不是正确的十六进制数。 – 2009-01-21 11:25:40

+3

绝对。 (这在C#中处理得更好,其中unicode转义仅适用于特定的上下文环境 - 但随后还存在危险的\ x转义序列,这非常糟糕。) – 2009-01-21 11:38:31

+0

非常好,转义格式效果很好。谢谢乔恩! – seanhodges 2009-01-21 11:48:58

85

与尝试:javac的 -encoding ISO-8859-1 file_name.java

1

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

  1. 选择项目
  2. 点击右键,选择属性
  3. 选择资源资源小组(其中2之后打开右上角的菜单)
  4. 你可以看到资源面板,文本文件编码,选择其他你wa nt

P.S:这将确定如果你在代码中的静态值。例如String test =“İİİİİııııııçççççç”;

1

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

36

如果您使用的是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> 
4

这其中大部分编译错误出现时的Unicode(UTF-8编码)文件编译

javac -encoding UTF-8 HelloWorld.java 
时间

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

enter image description here

-encoding : encoding Set the source file encoding name, such as EUC-JP and UTF-8.. If -encoding is not specified, the platform default converter is used. (DOC)

1

如果一个人使用Maven从命令提示一个构建可以使用下面的命令,以及:

    mvn -Dproject.build.sourceEncoding=UTF-8 
14

把这行放在yor文件中,放在Java conf上面。

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

这为我工作 -

<?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> 
相关问题