Google Weather API返回的变音无法正常显示

时间:2012-01-06 12:40:23

标签: java api internationalization weather

我正在尝试从Google Weather API中读取天气信息。

我的代码与此类似:

            String googleWeatherUrl = "http://www.google.de/ig/api?weather=berlin&hl=de";
    InputStream in = null;
    String xmlString = "";
    String line = "";
    URL url = null;
    try {
        url = new URL(googleWeatherUrl);
        in = url.openStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, UTF_8));
        while ((line = bufferedReader.readLine()) != null) {
            xmlString += line;
        }
    } catch (MalformedURLException e) {
    } catch (IOException e) {
    } 

    DocumentBuilder builder = null;
    Document doc = null;
    try {
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource source = new InputSource(new StringReader(xmlString));
        doc = builder.parse(source);

    } catch (ParserConfigurationException e) {} 
              catch (FactoryConfigurationError e) {} 
              catch (SAXException e) {} catch (IOException e) {}

基本上它就像魅力一样,但当返回的数据包含变音符号(ö,ü,ä,...)时,这些字符不能正常显示。在Eclipse以及浏览器或相应的源代码中,它们显示为矩形(或类似的奇怪的东西)。

实际上,变量xmlString已包含已损坏的变音符号。

有人对此有所了解吗?

谢谢和最诚挚的问候, 保罗

1 个答案:

答案 0 :(得分:3)

欢迎来到角色编码的神奇世界。请把你的理智放在门边的架子上......

您很可能需要使用source.setEncoding(encoding)并为网页指定正确的字符编码 - 如果您很幸运,编码实际上可能会在标题中指定。

将输入流的编码更改为“Latin1”,如下所示:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, Charset.forName("Latin1")));

在我的机器上测试时会返回正确的德语字符:

<current_conditions><condition data="Meistens bewölkt"/>