gpt4 book ai didi

java - 从java中的URL读取UTF-8编码的XML

转载 作者:行者123 更新时间:2023-11-30 04:47:09 24 4
gpt4 key购买 nike

我正在尝试从 Google 天气网络服务读取 XML 数据。响应包含一些西类牙语字符。问题是这些字符无法正确显示。我尝试将所有内容都转换为 UTF-8,但这似乎没有帮助。代码如下

public static void main(String[] args) {
try {
URL url = new URL("http://www.google.com/ig/api?weather=Noja&hl=es");
HttpURLConnection con = (HttpURLConnection) url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream(), "UTF-8"));
String str = in.readLine();
//this does not work even
//String str = new String(in.readLine().getBytes("UTF-8"),"UTF-8");
System.out.println(str);

in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

下面给出了输出(经过修剪以保持帖子的限制)。注意“mi�”和 s�b

修剪以保持最大字符限制

<day_of_week data="mi�"/><day_of_week data="s�b"/><low data="11"/><high data="16"/><icon data="/ig/images/weather/chance_of_rain.gif"/><condition data="Posibilidad de lluvia"/></forecast_conditions></weather></xml_api_reply>

最佳答案

如果该页面是 xml,那么您通常应该将 InputStream 直接传递给 xml 解析器并让它自动检测编码。否则,您应该查看 content type response header 的字符集参数确定正确的编码并创建适当的InputStreamReader。

编辑: 该服务器确实以不同的编码响应浏览器和 java 客户端,可能取决于 Accept-Charset 请求 header 。对于 Firefox,此 header 具有值

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n

这意味着两种字符集都被接受,对任何一种都没有偏好。服务器以 text/xml 的 Content-Type header 进行响应;字符集=UTF-8。 java客户端不发送此 header ,服务器以text/xml响应;字符集=ISO-8859-1

要使用服务器提供的字符集,您可以使用如下代码:

Matcher matcher = Pattern.compile("charset\\s*=\\s*([^ ;]+)").matcher(contentType);
String charset = "utf-8"; // default
if (matcher.find()) {
charset = matcher.group(1);
}
System.out.println(con.getContentType());

BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream(), charset));

编辑2:结果是服务器根据用户代理 header 决定要使用的字符集。如果添加以下行,它将以 utf-8 字符集响应。

con.setRequestProperty("User-Agent", "Mozilla/5.0");

无论如何,Content-Type 响应 header 包含要使用的正确字符集。

关于java - 从java中的URL读取UTF-8编码的XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com