java - 如何决定InputStream编码?

标签 java android

我的目标是将 xml 提要下载到 InputStream 中,然后将其转换为字符串,以便可以与 XmlPullParser 一起使用。

我将 InputStream 转换成这样的字符串:

InputStream input_stream = connection.getInputStream();
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(input_stream,"UTF-8"));
while ((line = br.readLine()) != null) {
    sb.append(line);
}

这就是问题所在,一些 XML 提要定义了特定的编码。以这个为例: http://voxinox.ch/podcasts/valdo/feed.xml

如果我使用默认的“UTF-8”编码,来自提要的一些字符看起来像一个带有问号的黑色菱形。如果我使用 xml header 中指定的编码,它就可以工作 (iso-8859-1),这不足为奇。

问题是在我开始读取包含编码规范的输入流之前如何决定使用什么编码?有更好的方法吗?

最佳答案

示例我如何从 XML 输入流中获取编码

FileInputStream finput = new FileInputStream(myFile);
                    String encoding = getInputEncoding(finput);
                    Log.d("Encoding: ", "> " + encoding);


public String getInputEncoding(FileInputStream finput){
      String encoding = "";
      if(finput!=null){

          try{
          BufferedReader myReader = new BufferedReader(new InputStreamReader(finput));
          String getline = "";
          getline = myReader.readLine();
          myReader.close();
          Log.d("Line: ", "> " + getline);

            String[] separated = getline.split("encoding=\"");
            String encoding1 = separated[1];
            String[] separated2 = encoding1.split("\"");
            encoding = separated2[0];

        } catch (Exception e) {

        }

      }
      return encoding;
    }

关于java - 如何决定InputStream编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246417/

相关文章:

java - 服务层私有(private)方法

java - 为什么 calendar.get(Calendar.MONTH) 返回 10 而不是 12?

java - 从Weka中的AdaBoostM1获取实例权重

java - 如何从 Java 访问 Kotlin 的 `backtickedFunctions`?

android - 切换可见性 AppBarLayout View 会导致加载 fragment 的间距问题

java - 更改父类中的变量类型

java - 插件Android支持中的异常(exception)-元素的内容必须包含格式正确的字符数据或标记

android adb shell script - 如何拉取所有共享首选项

android - 使用 Phonegap 在 Android 中更改铃声设置

Android应用程序在表格布局中动态添加行给出错误