diff --git a/src/main/org/apache/tools/ant/XmlLogger.java b/src/main/org/apache/tools/ant/XmlLogger.java index 96b9ea244..d9fb3f214 100644 --- a/src/main/org/apache/tools/ant/XmlLogger.java +++ b/src/main/org/apache/tools/ant/XmlLogger.java @@ -132,8 +132,12 @@ public class XmlLogger implements BuildListener { if (outFilename == null) { outFilename = "log.xml"; } - - Writer out = new FileWriter(outFilename); + + // specify output in UTF8 otherwise accented characters will blow + // up everything + Writer out = + new OutputStreamWriter(new FileOutputStream(outFilename), + "UTF8"); out.write("\n\n"); (new DOMElementWriter()).write(buildElement, out, 0, "\t"); out.flush(); diff --git a/src/main/org/apache/tools/ant/util/DOMElementWriter.java b/src/main/org/apache/tools/ant/util/DOMElementWriter.java index cc44790ab..2b520e8c8 100644 --- a/src/main/org/apache/tools/ant/util/DOMElementWriter.java +++ b/src/main/org/apache/tools/ant/util/DOMElementWriter.java @@ -67,7 +67,7 @@ import org.w3c.dom.*; * * @author The original author of XmlLogger * @author Stefan Bodewig - * @author Stephane Bailliez + * @author Stephane Bailliez */ public class DOMElementWriter { @@ -131,6 +131,9 @@ public class DOMElementWriter { break; case Node.TEXT_NODE: + out.write(encode(child.getNodeValue())); + break; + case Node.CDATA_SECTION_NODE: out.write(""); out.write(lSep); + out.flush(); } /** - * Escape <, & and " as their entities. + * Escape <, > & ' and " as their entities. */ public String encode(String value) { sb.setLength(0); @@ -183,6 +187,12 @@ public class DOMElementWriter { case '<': sb.append("<"); break; + case '>': + sb.append(">"); + break; + case '\'': + sb.append("'"); + break; case '\"': sb.append("""); break;