[Java] Pobieranie xml

Witam,

chciałbym parsowac tego xmla http://www.google.pl/ig/api?hl=pl&weather=lodz,

probowałem bezpośrednio z linku w ten sposob

String link="http://www.google.pl/ig/api?hl=pl&weather=lodz";

	URI cos = new URI(link);

	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

	DocumentBuilder builder = factory.newDocumentBuilder();

	Document doc = builder.parse(link);

niestety mam taki błąd:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.

	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)

	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)

	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)

	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)

	at TestParse.(TestParse.java:72)

	at TestParse.main(TestParse.java:118)

Jeżeli zapisze plik przez przeglądarkę i parsuje z pliku to działa bezbłędnie. Więc próbowałem zczytać stronę do pliku:

URL link = new URL("http://www.google.pl/ig/api?hl=pl&weather=lodz");


		   String source = "";

		   BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream(),"UTF-8"));

		   String linia;

	       while ((linia = in.readLine()) != null) 

	        {

	    	   source += linia+"\n";

	        }

	       in.close();


	       FileWriter fw = new FileWriter("a.xml");

	       fw.write(source);

	       fw.close();

i wszystko działa oprócz polskich znaków zamiast np Łódź mam " ? ?d? ", rozumiem że problem tkwi w kodowaniu ale nie mogę sobie z tym poradzić.

Znacie może jakieś inne xml które mogłbym wykorzystać?

pozdrawiam

Co rozumiesz przez inne xml? http://pl.wikipedia.org/wiki/XML, napisali, że albo masz tam tag z kodowaniem (który może być opcjonalny), albo domyślnie to UTF-8 w systemie unikod. Generalnie chyba nie istnieje sposób, żeby poznać kodowanie pliku bez oczywistej deklaracji. Koniec końców ciąg bajtów jest tylko interpretowany jako jakiś znak, czy ich zbiór.

Tylko nie wiem czemu jeśli zapisze plik przez przeglądarkę to mam polskie znaki a jeśli przez ten kod to już nie:/

Chciałbym napisać program pobierający dane pogodowe z internetu. Chodziło mi o to czy nie znacie jakiegoś innego xml-a z danymi pogodowymi który można by było wykorzystać (najlepiej jak z największą ilością danych).

Nie pytaj czemu (sam nie do końca rozumiem), ale z podanego url-a sciągnąłem ten plik poprawnie nie podając kodowania

BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));

Tyle, że dla ogólnego przypadku, gdy plik nie jest kodowany w UTF-8 to nie przejdzie, zastanawia mnie tylko, czemu domyślnie on pobiera to poprawnie, a z parametrem narzuconym w funkcji już nie.

[EDIT]

Dobra już wiem, domyślnie kodowany jest ten plik w ISO 8859-2, mimo, iż ktoś tego nie uwzględnił w tagu, bubel autora strony.