2015-03-25 97 views
1

我的目標是將一個xml feed下載到一個InputStream中,然後將它轉換爲一個String,以便可以與XmlPullParser一起使用。如何確定InputStream編碼?

我轉換的InputStream爲String這樣的:

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」編碼,那麼Feed中的某些字符看上去像一個帶有問號的黑色菱形形狀。如果我使用在xml頭文件中指定的編碼(iso-8859-1),這並不意外。

在我開始閱讀包含編碼規範的輸入流之前,我該如何決定使用哪種編碼?有沒有更好的方法來做到這一點?

+0

在XML得到編碼得到元信息前面像<?XML版本= 「1.0」 編碼= 「UTF-8」?>。您應該使用元信息中的編碼值進行正確編碼。例如,voxinox.ch/podcasts/valdo/feed.xml是編碼<?xml version =「1.0」encoding =「iso-8859-1」?> – eurosecom 2015-03-25 07:21:15

+0

同意,我正在尋找一種方法來解碼我的inputStream與編碼值,但是我需要在訪問inputStream之前指定編碼,有點雞和蛋的情況。 – Whome 2015-03-26 01:32:39

+0

顯然有第一個蛋。對於XML輸入流<?xml version =「1.0」encoding =「iso-8859-1」?>對於所有類型的編碼都是相等的。首先閱讀標籤編碼,然後再用正確的編碼再次閱讀。 – eurosecom 2015-03-26 09:11:45

回答

1

例你通常如何我從XML的InputStream

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; 
    }