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

时间:2019-05-17 18:55:33

标签: java character-encoding httprequest

我正在使用Java发送HTTP GET请求。请参见下面的代码。 当我解析响应时,德语“ Umlaute”(例如ß,ä,ü)只是垃圾字符。 我知道,这与字符集有关,但是我到底要做什么?

这是代码的一部分:

URL obj = new URL( urlAsString );
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
on.setRequestMethod( "GET" );

我是否必须设置特殊的请求属性或类似的属性?还是我必须以某种方式转换结果?

当我在Web浏览器的地址栏中输入“ urlAsString”时,我得到了理想的结果,并且所有“ Umlaute”都是正确的。

感谢您的任何提示! 托尔斯滕

2 个答案:

答案 0 :(得分:1)

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

...
<div class="row">
  <div class="col-12">
     <div class="jumbotron">
     </div>
  </div>
</div>
...

这部分必须正确,因为您说从浏览器进行测试时可以。

现在从客户端部分开始,即在Java程序中,您还必须设置标头Content-Type: text/html; charset=utf-8 ,该标头向服务器指示可以接受的字符集。例如对于utf-8,然后是iso-8859-1,您可以添加以下标头:

Accept-Charset

如果它不起作用,您还可以尝试通过指定字符集(例如:

)从连接中读取字节
Accept-Charset: utf-8, iso-8859-1;q=0.5

也许是问题所在,但您没有在发布的代码中显示此部分。

答案 1 :(得分:0)

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

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

我建议使用Apache Http Client以获得更好的用法和灵活性。