diff --git a/src/main/kotlin/app/revanced/patcher/util/Document.kt b/src/main/kotlin/app/revanced/patcher/util/Document.kt index 3cc4ade..c768552 100644 --- a/src/main/kotlin/app/revanced/patcher/util/Document.kt +++ b/src/main/kotlin/app/revanced/patcher/util/Document.kt @@ -4,7 +4,6 @@ import org.w3c.dom.Document import java.io.Closeable import java.io.File import java.io.InputStream -import java.io.StringWriter import javax.xml.parsers.DocumentBuilderFactory import javax.xml.transform.OutputKeys import javax.xml.transform.TransformerFactory @@ -36,20 +35,22 @@ class Document internal constructor( readerCount.remove(it) } - it.outputStream().buffered().use { stream -> - val transformer = TransformerFactory.newInstance().newTransformer() - // Set to UTF-16 but encode as UTF-8 to prevent surrogate pairs from being escaped to broken numeric character references. - if (isAndroid) { - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16") - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes") + val transformer = TransformerFactory.newInstance().newTransformer() + // Set to UTF-16 to prevent surrogate pairs from being escaped to invalid numeric character references, but save as UTF-8. + if (isAndroid) { + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16") + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes") + it.bufferedWriter(charset = Charsets.UTF_8).use { writer -> + transformer.transform(DOMSource(this), StreamResult(writer)) } - transformer.transform(DOMSource(this), StreamResult(stream)) + } else { + transformer.transform(DOMSource(this), StreamResult(it)) } } } private companion object { private val readerCount = mutableMapOf() - private val isAndroid = System.getProperty("java.runtime.name").equals("Android Runtime") + private val isAndroid = System.getProperty("java.runtime.name") == "Android Runtime" } }