2012-08-15 3 views
1

Android 앱에서받는 RSS 피드가 있습니다. 아이디어는 RSS 업데이트를 받고 보여주는 것만으로 간단합니다. 나는 올바른 말만 보여주는 것 외에는 모든 것을 관리했다. 문제는 데이터가 다른 언어로 쓰여지고 앱이 영어로되어 있다는 것입니다. 예 :응용 프로그램의 언어로 된 언어

9시 5분 KAMIONDŽIJE

20시 5분 Doček naših olimpijaca ispred Skupštine의 grada

과 같은 것들이 .. 당신은 그 Z, C, š 문자가 .. 그들은 다른로 표시됩니다 참조 알 수없는 - 투 - 날 언어 .. 아무도 어떻게이 문제를 해결할 수 있습니다 .. 난 그냥 그것이 RSS의 XML 파일에 쓰여진대로, 어쨌든 변경되고 싶어요.

이 내 완벽한 파서 클래스입니다 :

public class XMLParser { 

// constructor 
public XMLParser() { 

} 

/** 
* Getting XML from URL making HTTP request 
* @param url string 
* */ 
public String getXmlFromUrl(String url) { 
    String xml = null; 

    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // return XML 
    return xml; 
} 
/** 
* Getting XML DOM element 
* @param XML string 
* */ 

public Document getDomElement(String xml){ 
    Document doc = null; 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    dbf.setCoalescing(true); 
    dbf.setNamespaceAware(true); 
    try { 
     DocumentBuilder db = dbf.newDocumentBuilder(); 

     InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xml)); 
      doc = db.parse(is); 

     } catch (ParserConfigurationException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } 

     return doc; 
} 

/** Getting node value 
    * @param elem element 
    */ 
public final String getElementValue(Node elem) { 
    Node child; 
    if(elem != null){ 
     if (elem.hasChildNodes()){ 
      for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
       //if(child.getNodeType() == Node.TEXT_NODE ){ 
       if(child.getNodeType() == Node.TEXT_NODE || child.getNodeType() == Node.CDATA_SECTION_NODE){ 
        return child.getNodeValue(); 
       } 
      } 
     } 
    } 
    return ""; 
    //return elem.getTextContent(); 
} 

/** 
    * Getting node value 
    * @param Element node 
    * @param key string 
    * */ 
public String getValue(Element item, String str) {  
     NodeList n = item.getElementsByTagName(str);     
     return this.getElementValue(n.item(0)); 
    } 
public String getValue2(Element item, String str){ 
    //NodeList n = item.getElementsByTagNameNS("http://purl.org/rss/1.0/modules/content/", str); 
    return item.getTextContent(); 
} 


} 

답변

0

당신은 텍스트가 UTF-8로 해석되어 있는지 확인해야합니다. 그러나 당신이 그것을했을 때, 당신은 여전히 ​​이상한 숯을 잔뜩 가지고있을 것입니다. 그러나 이것은 정상입니다. 많은 언어들이 이상한 문자들을 가지고 있습니다. 덴마크 (내 뿌리)에는 æøå이 있습니다.

편집 :

EntityUtils.toString(httpEntity,"UTF-8"); 
+0

가 어떻게이 UTF-8로 해석되는 것을 확인할 수 있습니다

이 시도? .. 나는 그 말이 무슨 뜻인지 알고, 그들은 고국의 말 (세르비아)이지만, 나는 단지 그들이 응용 프로그램에서 바로 보여주고 싶습니다. – Igx33

+0

그렇다면 데이터를 읽는 곳의 코드를 보여줘야합니다. – Warpzit

+0

좋아, 내가 편집 한 내 게시물이 .. 그것을 확인 getValue2는 <내용 : 코드>입니다주의 사물과 getValue1 정상 일 .. – Igx33