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

问题描述 投票:0回答:3

我正在使用 java 发送 HTTP GET 请求。请参阅下面的代码。 当我解析响应时,德语“元音变音”(例如 ß、ä、ü)只是垃圾字符。 我知道,这是关于字符集的问题,但我到底该怎么做?

这是代码的一部分:

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

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

当我在网络浏览器地址行中输入“urlAsString”时,我得到了完美的结果,并且所有“Umlaute”都是正确的。

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

java character-encoding httprequest
3个回答
1
投票

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

Content-Type: text/html; charset=utf-8

这部分必须是正确的,正如你所说,当你从浏览器测试时是可以的。

现在从客户端部分,即在您的java程序中,您还必须设置标头

Accept-Charset
,向服务器指示您可以接受的字符集。例如,对于 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"));

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


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 以获得更好的使用性和灵活性。


0
投票

您在标头请求中添加:

httpGet.setHeader("Content-type", "application/json; charset=utf-8");
httpGet.setHeader("Accept", "application/json; charset=utf-8");
httpGet.setHeader("Content-Encoding", "UTF-8");
© www.soinside.com 2019 - 2024. All rights reserved.