fix: Encode XML files as UTF-8 to fix compilation of resources (#339)

Co-authored-by: kitadai31 <90122968+kitadai31@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
This commit is contained in:
Pg
2025-06-20 16:41:53 +02:00
committed by GitHub
parent 062ae14936
commit 4f2ef3c47c

View File

@@ -4,7 +4,9 @@ import org.w3c.dom.Document
import java.io.Closeable import java.io.Closeable
import java.io.File import java.io.File
import java.io.InputStream import java.io.InputStream
import java.io.StringWriter
import javax.xml.parsers.DocumentBuilderFactory import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.TransformerFactory import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult import javax.xml.transform.stream.StreamResult
@@ -35,14 +37,19 @@ class Document internal constructor(
} }
it.outputStream().buffered().use { stream -> it.outputStream().buffered().use { stream ->
TransformerFactory.newInstance() val transformer = TransformerFactory.newInstance().newTransformer()
.newTransformer() // Set to UTF-16 but encode as UTF-8 to prevent surrogate pairs from being escaped to broken numeric character references.
.transform(DOMSource(this), StreamResult(stream)) if (isAndroid) {
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16")
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")
}
transformer.transform(DOMSource(this), StreamResult(stream))
} }
} }
} }
private companion object { private companion object {
private val readerCount = mutableMapOf<File, Int>() private val readerCount = mutableMapOf<File, Int>()
private val isAndroid = System.getProperty("java.runtime.name").equals("Android Runtime")
} }
} }