如何在Java中更改HTTP响应中的字符集?

如何在Java中更改HTTP响应中的字符集?,java,character-encoding,httprequest,Java,Character Encoding,Httprequest,我正在用java发送一个HTTP GET请求。请参阅下面的代码。 当我解析响应时,德语的Umlaute例如ß,ä,ü只是垃圾字符。 我知道,这是关于charset的事,但我到底要做什么 这是代码的一部分: URL obj = new URL( urlAsString ); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); on.setRequestMethod( "GET" ); 我必须设置一个特殊的请求属性或类

我正在用java发送一个HTTP GET请求。请参阅下面的代码。 当我解析响应时,德语的Umlaute例如ß,ä,ü只是垃圾字符。 我知道,这是关于charset的事,但我到底要做什么

这是代码的一部分:

URL obj = new URL( urlAsString );
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
on.setRequestMethod( "GET" );
我必须设置一个特殊的请求属性或类似的东西吗?还是我必须以某种方式转换结果

当我在web浏览器的地址行中输入URLAString时,我得到了一个完美的结果,并且所有Umlaute都是正确的

谢谢你的提示!
托尔斯滕

你能这样试试下面吗?在这里,您可以设置utf-8的内容类型和字符集编码

 URL obj = new URL( urlAsString );
 HttpURLConnection con = (HttpURLConnection) obj.openConnection();
 con.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
 on.setRequestMethod( "GET" );

我建议使用ApacheHTTP客户端,以获得更好的使用和灵活性。

您必须在响应部分设置字符集,而不是在请求部分,例如

Content-Type: text/html; charset=utf-8
这一部分必须正确,正如您所说,当您从浏览器进行测试时,它是正常的

现在,从java程序中的客户机部分开始,您还必须设置头部Accept字符集,它向服务器指示您可以接受的字符集。例如,对于utf-8和iso-8859-1,您可以添加以下标题:

Accept-Charset: utf-8, iso-8859-1;q=0.5
如果不起作用,您还可以尝试通过指定字符集从连接中读取字节,例如:

DataOutputStream ds = new DataOutputStream(con.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(ds, "UTF-8"));

也许问题就在那里,但是你没有在发布的代码中显示这一部分

不幸的是,这不起作用。还是一样的结果。你能提供url吗?顺便说一句,如果你在谷歌chrome上搜索并按Ctrl+Shift+i进行调试,你可以看到url中的更多细节,你可以看到请求和响应参数的详细信息。它会给你更多的洞察力。它现在起作用了!我添加了字符集。。。此代码的内容:BufferedReader in=new BufferedReader new InputStreamReader con.getInputStream,Charset.forNameUTF-8;伟大的它在浏览器中运行良好的事实很好地提示了可能的原因。@user1119859请注意,并非每个HTTP响应都会返回UTF-8内容。实际字符集应从响应的。