2011-12-27 9 views
0

私はGoogleの気象APIから気象データを取得し、JDOM経由でドキュメントを解析しようとしています。JDOM Umlautsを使用したXMLの解析

これは私が使用しているコードです:

SAXBuilder builder = new SAXBuilder(); 
Document doc; 
URL url = new URL(GOOGLE_WEATHER_API); 
doc = builder.build(url);  
Element root = doc.getRootElement(); 
Element weather = root.getChild("weather"); 
List currentConditions = weather.getChildren("current_conditions"); 
... 

問題は、Googleによって返されるXMLは、ウムラウトを(ü、ä、ö...)が含まれていたときに、私は

JDOMParseExceptionを得るということです

org.jdom.input.JDOMParseException: Error on line 1 of document http://www.google.de/ig/api?weather=Heidelberg&hl=en :
Fatal Error: com.sap.engine.lib.xml.parser.ParserException:
Incorrect encoded sequence detected at character (hex) 0x72, (bin) 1110010.
Check whether the input parsed contains correctly encoded characters.
Encoding used is: 'utf-8'(http://www.google.de/ig/api?weather=Heidelberg&hl=en, row:1, col:191):
Incorrect encoded sequence detected at character (hex) 0x72, (bin) 1110010.
Check whether the input parsed contains correctly encoded characters.
Encoding used is: 'utf-8' (http://www.google.de/ig/api?weather=Heidelberg&hl=en, row:1, col:191)

ブラウザでURLを開くと、エンコードがUTF-8のページのプロパティを確認します。だから私はなぜそれが動作しないのか分からない。 誰かがアイデアを持っていますか?

よろしく、

ポール
+0

奇数を、私はXercesのようなさまざまなXMLパーサーをしようとするかもしれない以外は何も考えることはできません。私はcom.sap.engine.lib.xml.parserについて知らない。 –

答えて

1

そのURLからXML結果は、XMLヘッダ内の任意の符号化を含みません。その代わりに、エンコーディングはhttp応答(ISO-8859-1)のContent-Typeヘッダで指定されます。どうやら、あなたがjdomにURLを渡していても、これは正しく処理されていません(UTF-8はエンコーディングのないxmlのデフォルトです)。ヘッダーを読んで正しいエンコーディングをjdomに渡すか、あなたのためにそれを行うことができるパーサを使用する必要があります(ただし、私は標準のxmlパーサーは分かりませんが)。

あなたは、標準のXML APIを使用した場合、あなたのようなものだろう:

HttpURLConnection = (HttpURLConnection)url.openConnection(); 
String encoding = ... // get encoding from http header 
InputSource source = new InputSpource(url.openStream()); 
source.setEncoding(encoding); 
DocumentBuilder db = ... // create doc builder 
Document doc = db.parse(source);