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 = {