48

I've got java source files with iso-8859-1 encoding. When I run ant, I get "warning: unmappable character for encoding UTF-8". I can avoid this if I run ant -Dfile.encoding=iso-8859-1 or add encoding="ISO-8859-1" to each javac statement.

Is there a way to set the property globally within build.xml? <property name="file.encoding" value="ISO-8859-1"> does not work. I know that I can add a foo=ISO-8859-1 property and set encoding="${foo}" to each javac statement, but I'm trying to avoid that.

skaffman
  • 398,947
  • 96
  • 818
  • 769
neu242
  • 15,796
  • 20
  • 79
  • 114
  • The problem should be solved in four places simultaneously: http://stackoverflow.com/a/34225997/715269 – Gangnus Dec 11 '15 at 14:40

4 Answers4

75

If you've got files encoded in a particular way, it's probably best to tell javac that rather than forcing the whole JVM to use a particular encoding. The javac task has an encoding attribute for this reason.

<javac srcdir="${src.dir}" destdir="${build.classes.dir}" encoding="iso-8859-1" />

But really, you should just convert the source files to UTF-8. Everything tastes better in UTF-8. :)

martin clayton
  • 76,436
  • 32
  • 213
  • 198
Dominic Mitchell
  • 11,861
  • 4
  • 29
  • 30
  • 1
    Even if you convert the contents to UTF-8, you sometimes have to have a clean environment (LC_ALL=C) and there that comes pretty much handy. – user1050755 Aug 16 '12 at 06:40
37

A few options:

  1. add -Dfile.encoding=iso-8859-1 to your ANT_OPTS environment variable
  2. use <presetdef> to setup defaults for all of your <javac> invocations
Drew Noakes
  • 300,895
  • 165
  • 679
  • 742
3

Before changing build file i am getting java compile error like below.

ApplicationConstant.java:73: error: unmappable character for encoding ascii public static final String INVALID_MDTVERSION_SECOND = " This not compatible with the server’s Version";

I have encounter this error when I used to have ant java target as:

 <javac encoding="ascii"...>

Than i have change as below

<javac encoding="iso-8859-1" ...> 

This issue got solved.

Gautam
  • 3,707
  • 5
  • 36
  • 57
1

Ant itself cannot set system properties, but if you really want to, you can write a java program which sets the system property, and execute that from within Ant.

skaffman
  • 398,947
  • 96
  • 818
  • 769