java - JDOM 使用变音符号解析 XML

标签 java jdom diacritics

我正在尝试从 google 天气 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 包含变音符号(ü、ä、ö...),我就会收到 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。所以我不知道为什么它不起作用。 有人有想法吗?

最诚挚的问候, 保罗

最佳答案

该 URL 的 xml 结果在其 xml header 中不包含任何编码。相反,编码是在 http 响应 (ISO-8859-1) 的 Content-Type header 上指定的。显然,即使您将 URL 传递给 jdom,它也无法正确处理(它使用 UTF-8,这是没有编码的 xml 的默认值)。您需要自己处理http响应(读取 header 并将正确的编码传递给jdom),或者使用可以为您完成此操作的解析器(尽管我不知道有任何标准的xml解析器可以做到这一点)。 p>

如果您使用标准 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);

关于java - JDOM 使用变音符号解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644971/

相关文章:

java - 使用 JDOM 查找后代元素

java - 使用 JDOM 重写 XML/DOM 树时出现问题 (ConcurrentModificationException)

string - 如何使用变音符号从 JSP 页面正确解释参数

python - 如何将图像导出到 GIMP 中的子目录?

java - 同步计数器大小()

java - 在 tableView 中显示列

java - 为什么我在 Java 中得不到这个二维数组的输出?

java - 使用 jdom 从 xml 文件中删除元素

ruby - 来自文件系统的带有变音符号的字符串的长度

java - JPanel说不透明是什么意思?