На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Парсинг xml
    Есть xml. Его парсю через андройд апликэйшн. Всё получается, если английский язык. Но если поменять в xml - на русский язык, то при отображении страницы в android api - символы отображаются некорректно. Испробовал поменять кодировку в xml с utf-8 на windows-1251. Не помогло. Пробовал заставить апликацию понимать кодировку -

    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    is.setEncoding ("windows-1251");
    doc = db.parse(is);

    Ничего не выходит. Может, кто сможет подсказать. Если надо больше исходника - выложу...

    is.setEncoding("UTF_8");

    тоже ничего не выходит

    Посмотрел в вики http://ru.wikipedia.org/wiki/%D0%9A%D1%80%...%B1%D1%80%D1%8B Сравнил крокозябры. Если мы ставим в xml, который парсим, кодировку 1251, то крокозябры как будто идёт перекодировка из 1251 в 1252. Если мы ставим в xml кодировку utf-8, то крокозябры выглядят, как будто перекодируем из utf в 1252. В чём может быть проблема?
      А в эксемельке в первой строке есть encoding="UTF-8" ?
        конечно(

        Такое ощущение, что на выходе в win1252 каким-то образом перекодирует...(но это только ощущения)
          muskos, сейчас нет компа по рукой, завтра гляну.
            Британский учёныйЗавтра я с ума сойду с этой кодировкой....
              Так спроси на стековерфло, там мигом ответят.
                ну, языка не хватает)
                спросил на hashcode - молчат(((
                  Британский учёный стековерфло молчит, Хэшкод молчит...
                      Британский учёный Вообщем...мне кажется проблема не на входе, а на выходе...
                      Когда я смотрю в вики сравнение на кракозябры почему-то кодировку xml он принимает как надо - utf-8(или когда я менял - windows-1251)...но на выходе получается кракозябры как будто идёт перекодировка в windows-1252...
                      Проверяю не только в эмуляторе, но и в телефоне.
                      Версия android - 2.2.

                      Сегодня попробовал скопипастить другой пример парсинга. Опять же английский парсит, на русский выводит перекодировку в windows-1252

                      Добавлено
                      Британский учёный Понимаете, в чём дело) Я не особо крут в ява))) принцип понимаю, но что куда - не особо) У меня слегка другой код)))
                      Ща...

                      Добавлено
                      ExpandedWrap disabled
                        import javax.xml.parsers.ParserConfigurationException;
                         
                        import org.apache.http.HttpEntity;
                        import org.apache.http.HttpResponse;
                        import org.apache.http.client.methods.HttpPost;
                        import org.apache.http.impl.client.DefaultHttpClient;
                        import org.apache.http.util.EntityUtils;
                        import org.w3c.dom.Document;
                        import org.w3c.dom.Element;
                        import org.w3c.dom.Node;
                        import org.w3c.dom.NodeList;
                        import org.xml.sax.InputSource;
                        import org.xml.sax.SAXException;
                         
                         
                        public class XMLParser {
                         
                            public final static Document XMLfromString(String xml){
                                
                                Document doc = null;
                                
                                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                                try {
                                    
                                    DocumentBuilder db = dbf.newDocumentBuilder();
                                    
                                    InputSource is = new InputSource();
                                    is.setCharacterStream(new StringReader(xml));
                                    doc = db.parse(is);
                                    
                                } catch (ParserConfigurationException e) {
                                    System.out.println("XML parse error: " + e.getMessage());
                                    return null;
                                } catch (SAXException e) {
                                    System.out.println("Wrong XML file structure: " + e.getMessage());
                                    return null;
                                } catch (IOException e) {
                                    System.out.println("I/O exeption: " + e.getMessage());
                                    return null;
                                }
                                      
                                return doc;
                                
                            }
                            
                            /** Returns element value
                              * @param elem element (it is XML tag)
                              * @return Element value otherwise empty String
                              */
                             public final static String getElementValue( Node elem ) {
                                 Node kid;
                                 if( elem != null){
                                     if (elem.hasChildNodes()){
                                         for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
                                             if( kid.getNodeType() == Node.TEXT_NODE  ){
                                                 return kid.getNodeValue();
                                             }
                                         }
                                     }
                                 }
                                 return "";
                             }
                                
                             public static String getXML(){  
                                    String line = null;
                         
                                    try {
                                        
                                        DefaultHttpClient httpClient = new DefaultHttpClient();
                                        HttpPost httpPost = new HttpPost("http://alfoot.net/newfile.xml");
                         
                                        HttpResponse httpResponse = httpClient.execute(httpPost);
                                        HttpEntity httpEntity = httpResponse.getEntity();
                                        line = EntityUtils.toString(httpEntity);
                                        
                                    } catch (UnsupportedEncodingException e) {
                                        line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                                    } catch (MalformedURLException e) {
                                        line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                                    } catch (IOException e) {
                                        line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                                    }
                         
                                    return line;
                         
                            }
                            
                            public static int numResults(Document doc){    
                                Node results = doc.getDocumentElement();
                                int res = -1;
                                
                                try{
                                    res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
                                }catch(Exception e ){
                                    res = -1;
                                }
                                
                                return res;
                            }
                         
                            public static String getValue(Element item, String str) {      
                                NodeList n = item.getElementsByTagName(str);        
                                return XMLParser.getElementValue(n.item(0));
                            }
                        }


                      ExpandedWrap disabled
                        package blr.first;
                         
                        import java.util.ArrayList;
                        import java.util.HashMap;
                         
                        import org.w3c.dom.Document;
                        import org.w3c.dom.Element;
                        import org.w3c.dom.NodeList;
                         
                        import android.app.ListActivity;
                        import android.os.Bundle;
                        import android.view.View;
                        import android.widget.AdapterView;
                        import android.widget.AdapterView.OnItemClickListener;
                        import android.widget.ListAdapter;
                        import android.widget.ListView;
                        import android.widget.SimpleAdapter;
                        import android.widget.Toast;
                         
                        public class PrimierMatchActivity extends ListActivity {
                            /** Called when the activity is first created. */
                            @Override
                            public void onCreate(Bundle savedInstanceState) {
                                super.onCreate(savedInstanceState);
                                setContentView(R.layout.listplaceholder);
                                
                                ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
                              
                              
                                String xml = XMLParser.getXML();
                                Document doc = XMLParser.XMLfromString(xml);
                                        
                                int numResults = XMLParser.numResults(doc);
                                
                                if((numResults <= 0)){
                                    Toast.makeText(PrimierMatchActivity.this, "Geen resultaten gevonden", Toast.LENGTH_LONG).show();  
                                    finish();
                                }
                                        
                                NodeList nodes = doc.getElementsByTagName("result");
                                            
                                for (int i = 0; i < nodes.getLength(); i++) {                          
                                    HashMap<String, String> map = new HashMap<String, String>();    
                                    
                                    Element e = (Element)nodes.item(i);
                                    map.put("id", XMLParser.getValue(e, "id"));
                                    map.put("name", "Naam:" + XMLParser.getValue(e, "name"));
                                    map.put("Score", "Score: " + XMLParser.getValue(e, "score"));
                                    mylist.add(map);            
                                }      
                              
                                ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.primiermatch,
                                                new String[] { "name", "Score" },
                                                new int[] { R.id.item_title, R.id.item_subtitle });
                                
                                setListAdapter(adapter);
                                
                                final ListView lv = getListView();
                                lv.setTextFilterEnabled(true);  
                                lv.setOnItemClickListener(new OnItemClickListener() {
                                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                                        @SuppressWarnings("unchecked")
                                        HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                  
                                        Toast.makeText(PrimierMatchActivity.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_LONG).show();
                         
                                    }
                                });
                            }
                        }


                      вот два моих файлика...если можно, покажите куда копипастить))

                      Добавлено
                      Кажется нашёл, но всё же, пока тестю, если сможите - отпишите) может не то нашёл)
                        muskos, тести бо я у компа буду часа через 2
                          Цитата muskos @
                          public class XMLParser {

                          public final static Document XMLfromString(String xml){

                          Document doc = null;

                          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                          try {

                          DocumentBuilder db = dbf.newDocumentBuilder();

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

                          } catch (ParserConfigurationException e) {
                          System.out.println("XML parse error: " + e.getMessage());
                          return null;
                          } catch (SAXException e) {
                          System.out.println("Wrong XML file structure: " + e.getMessage());
                          return null;
                          } catch (IOException e) {
                          System.out.println("I/O exeption: " + e.getMessage());
                          return null;
                          }

                          return doc;

                          }

                          Вот это не надо делать, достаточно воспользоваться методом public Document parse(String uri)
                            mrco Эм...я ноль))) Ну, спасибо, почитаю, может просветит)
                              Не, я ошибся. Это сосвем не то что нужно.
                                хух)) расслабил)
                                на стековерфло всё пытаются на шрифт давить и кодировку....думаю проблема не в этом..
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0390 ]   [ 15 queries used ]   [ Generated: 10.12.24, 20:11 GMT ]