Я пытаюсь читать разные xml-файлы из ресурсов в своем проекте, и после некоторого поиска я обнаружил, что getResource().readText(), похоже, отлично работает для большинства. Однако, когда я пытаюсь это сделать, на выходе получается просто куча
��������������@�������������������.
Я не эксперт, но я предполагаю, что это как-то связано с UTF-8, но я просто не могу найти ответ.
val fileContent =
this::class.java.getResource("/res/xml/test.xml").readText(Charsets.UTF_8)
(Я пробовал как с "Кодировки.UTF_8", так и без него)
XML-файл, который я пытаюсь прочитать:
<?xml version = "1.0" encoding = "UTF-8"?><request><getInkLevels/></request>
Метод Class#getResource(String), который вы пробовали, обычно не используется в разработке для Android. Каноническая практика заключается в использовании экземпляра класса Resources, полученного из экземпляра Context. Вы можете прочитать руководство по ресурсам для разработчиков, чтобы узнать больше.
Проверьте этот ответ, чтобы узнать, что, по моему мнению, является самым простым способом удовлетворить ваши потребности.
Он предлагает хранить ваш XML-файл в каталоге /res/raw и получать к нему доступ во время выполнения через Resources#openRawResource(int). Этот метод возвращает входной поток, который вы можете прочитать, однако он лучше всего подходит для вас. Некоторые библиотеки синтаксического анализа XML могут напрямую принимать входной поток. Вы также можете прочитать поток в строку следующим образом:
import android.content.res.Resources
import androidx.annotation.RawRes
fun readXmlResourceAsString(resources: Resources, @RawRes xmlResId: Int): String =
resources.openRawResource(xmlResId).use { resourceStream ->
String(resourceStream.readBytes(), Charsets.UTF_8)
}
Я также упомяну, что есть метод, который, кажется, должен лучше соответствовать вашим потребностям, а именно Resources#getXml(Int). Однако он возвращает экземпляр android.content.res.XmlResourceParser с довольно ограниченными возможностями синтаксического анализа. Я сильно подозреваю, что использование этого класса для достижения того, что вы собираетесь делать с вашим XML, окажется излишне сложным.