使用getResource()。readText()读取xml文件时遇到问题

时间:2019-06-14 09:44:10

标签: android xml kotlin character-encoding

我正在尝试从项目中的资源中读取不同的xml文件,并且搜索了一会儿之后,我发现 A B C 0 1 1 2.0 # mean of 1.0 and 3.0 1 2 1 1.0 2 3 1 3.0 3 4 1 5.0 4 1 2 6.0 5 2 2 2.0 6 3 2 4.0 # mean of 6.0 and 2.0 7 4 2 6.0 # mean of 6.0 and NaN 似乎可以正常工作。但是,当我尝试执行此操作时,输出只是一堆

  

��������������@�������������������。

我不是专家,但我想它与UTF-8有关,但我根本找不到答案。

getResource().readText()

(我尝试过使用和不使用“ Charsets.UTF_8”

我尝试读取的xml文件:

val fileContent = 
this::class.java.getResource("/res/xml/test.xml").readText(Charsets.UTF_8)

1 个答案:

答案 0 :(得分:0)

您尝试过的Class#getResource(String)方法通常不在Android开发中使用。规范做法是使用从Resources实例获得的Context类的实例。您可以阅读developer resources guide了解更多信息。

查看this answer,了解我认为最简单的方法可以满足您的需求。

建议将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进行的操作会不必要地困难。