Android: RSS анализът спира при специални знаци

Търсих много, но не намерих решение защо моят rss четец спира на специални знаци като æ ø å ' и т.н. Четецът чете емисията, докато не попадне на специален символ - след това спира да чете този елемент и продължава към следващия. Така че, когато показвам новините в моето приложение, текстът ми е отрязан при специалния знак, това е много досадно! Със сигурност има нещо общо с кодирането, но просто не мога да разбера какво да правя с моя код.

Този код работи добре с други емисии като http://www.fyens.dk/rss/sport който е в кодиране iso-8859-1. С тази емисия той показва специални знаци без проблем. Но ако опитам канал като http://ob.dk/forum/rss.aspx?ForumID=3&Mode=0, което е UTF-8, възниква проблемът.

Някакви предложения как да се реши този проблем?

    try {
        //open an URL connection make GET to the server and 
        //take xml RSS data
        URL url = new URL("http://ob.dk/forum/rss.aspx?ForumID=3&Mode=0");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = conn.getInputStream();

            //DocumentBuilderFactory, DocumentBuilder are used for 
            //xml parsing
            DocumentBuilderFactory dbf = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();



            //using db (Document Builder) parse xml data and assign
            //it to Element
            Document document = db.parse(is);
            Element element = document.getDocumentElement();

            //take rss nodes to NodeList
            NodeList nodeList = element.getElementsByTagName("item");

            if (nodeList.getLength() > 0) {
                for (int i = 0; i < nodeList.getLength(); i++) {

                    //take each entry (corresponds to <item></item> tags in 
                    //xml data

                    Element entry = (Element) nodeList.item(i);

                    Element _titleE = (Element) entry.getElementsByTagName(
                            "title").item(0);
                    Element _descriptionE = (Element) entry
                            .getElementsByTagName("description").item(0);
                    Element _pubDateE = (Element) entry
                            .getElementsByTagName("pubDate").item(0);
                    Element _linkE = (Element) entry.getElementsByTagName(
                            "link").item(0);

                    String _title = _titleE.getFirstChild().getNodeValue();
                    String _description = _descriptionE.getFirstChild().getNodeValue();
                    Date _pubDate = new Date(_pubDateE.getFirstChild().getNodeValue());
                    String _link = _linkE.getFirstChild().getNodeValue();

                    int time = _pubDate.getHours()-2;

                    _pubDate.setHours(time);

                            RssItem rssItem = new RssItem("OB.dk: "+_title, _description,
                                    _pubDate, "http://www.google.com/gwt/x?u="+_link);

                            rssItems.add(rssItem);

                    }



            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

person bengaard    schedule 02.11.2011    source източник


Отговори (1)


Мисля, че това ще ви помогне:

http://www.developerfeed.com/xml/common/issues/xml-parsing-failing-due-encoding-not-being-utf-8

Mvh.

person gosr    schedule 02.11.2011
comment
благодаря за помощта, да, но тази статия използва String xml.getBytes(UTF8)) - и аз имам InputStream е и не мога да използвам този метод. Опитах ByteArrayInputStream test = new ByteArrayInputStream(is.toString().getBytes(UTF8)); но това не проработи. Как мога да кодирам този входен поток в UTF8? - person bengaard; 03.11.2011
comment
добре, тази страница ме доведе до codinggreenrobots.com, който има друг пример за rss, който се справя добре със специални знаци. - person bengaard; 03.11.2011
comment
@bengaard Не посочихте решението или директна връзка и не можах да го намеря на сайта на codinggreenrobots, но в крайна сметка открих това (поправи проблема ми със специални знаци): InputSource е = нов InputSource(url.openStream ()); is.setEncoding(ISO-8859-1); xr.parse(е); - person Chad Schultz; 03.07.2012