diff --git a/jvm/src/test/scala/scala/xml/XMLTest.scala b/jvm/src/test/scala/scala/xml/XMLTest.scala
index 9ae6bc389..43dd182e2 100644
--- a/jvm/src/test/scala/scala/xml/XMLTest.scala
+++ b/jvm/src/test/scala/scala/xml/XMLTest.scala
@@ -300,6 +300,29 @@ class XMLTestJVM {
""", wsdlTemplate4("service4", () => "target4") toString)
}
+ // Issue found with ISO-8859-1 in #121 that was fixed with UTF-8 default
+ @UnitTest
+ def writeReadNoDeclarationDefaultEncoding: Unit = {
+ val chars = ((32 to 126) ++ (160 to 255)).map(_.toChar)
+ val xml = { chars.mkString }
+
+ // com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:
+ // Invalid byte 1 of 1-byte UTF-8 sequence.
+ // scala.xml.XML.save("foo.xml", xml)
+ // scala.xml.XML.loadFile("foo.xml").toString)
+
+ val outputStream = new java.io.ByteArrayOutputStream
+ val streamWriter = new java.io.OutputStreamWriter(outputStream, XML.encoding)
+
+ XML.write(streamWriter, xml, XML.encoding, false, null)
+ streamWriter.flush
+
+ val inputStream = new java.io.ByteArrayInputStream(outputStream.toByteArray)
+ val streamReader = new java.io.InputStreamReader(inputStream)
+
+ assertEquals(xml.toString, XML.load(streamReader).toString)
+ }
+
@UnitTest
def t0663 = {
val src = scala.io.Source.fromString("")
diff --git a/shared/src/main/scala/scala/xml/XML.scala b/shared/src/main/scala/scala/xml/XML.scala
index 649c8b029..be1de76a5 100755
--- a/shared/src/main/scala/scala/xml/XML.scala
+++ b/shared/src/main/scala/scala/xml/XML.scala
@@ -63,7 +63,7 @@ object XML extends XMLLoader[Elem] {
val preserve = "preserve"
val space = "space"
val lang = "lang"
- val encoding = "ISO-8859-1"
+ val encoding = "UTF-8"
/** Returns an XMLLoader whose load* methods will use the supplied SAXParser. */
def withSAXParser(p: SAXParser): XMLLoader[Elem] =
@@ -73,6 +73,10 @@ object XML extends XMLLoader[Elem] {
* Saves a node to a file with given filename using given encoding
* optionally with xmldecl and doctype declaration.
*
+ * Note: default encoding was ISO-8859-1 (latin1) in pre-1.0.7 scala-xml versions.
+ * If your code depends on characters in non-ASCII latin1 range, specify
+ * ISO-8859-1 encoding explicitly.
+ *
* @param filename the filename
* @param node the xml node we want to write
* @param enc encoding to use
@@ -82,7 +86,7 @@ object XML extends XMLLoader[Elem] {
final def save(
filename: String,
node: Node,
- enc: String = encoding,
+ enc: String = "UTF-8",
xmlDecl: Boolean = false,
doctype: dtd.DocType = null): Unit =
{