Java JDOM使用Umlauts解析XML

Java JDOM使用Umlauts解析XML,java,jdom,diacritics,Java,Jdom,Diacritics,我试图从谷歌的天气api获取天气数据,并通过JDOM解析文档 这是我正在使用的代码: 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"); L

我试图从谷歌的天气api获取天气数据,并通过JDOM解析文档

这是我正在使用的代码:

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包含Umlaut(ü,ä,ö…)时,我就会得到一个JDOMParseException

org.jdom.input.jDomainException:文档第1行出现错误:
致命错误:com.sap.engine.lib.xml.parser.ParserException:
在字符(十六进制)0x72,(bin)1110010处检测到不正确的编码序列。
检查解析的输入是否包含正确编码的字符。
使用的编码是:“utf-8”(http://www.google.de/ig/api?weather=Heidelberg&hl=en,行:1,列:191):
在字符(十六进制)0x72,(bin)1110010处检测到不正确的编码序列。
检查解析的输入是否包含正确编码的字符。
使用的编码是:“utf-8”(http://www.google.de/ig/api?weather=Heidelberg&hl=en,行:1,列:191)

当我在浏览器中打开URL并检查页面属性时,编码为UTF-8。所以我不知道为什么它不起作用。 有人有主意吗

致以最良好的祝愿,
Paul

来自该URL的xml结果在其xml头中不包含任何编码。而是在http响应(ISO-8859-1)的内容类型头上指定编码。显然,即使您将URL传递给jdom,它也没有正确地处理这个问题(它使用的是UTF-8,这是没有编码的xml的默认值)。您需要自己处理http响应(读取头并将正确的编码传递给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);

奇怪的是,除了尝试像Xerces这样的不同的XML解析器之外,我想不出任何东西。我不知道com.sap.engine.lib.xml.parser。