我正在使用 java 发送 HTTP GET 请求。请参阅下面的代码。 当我解析响应时,德语“元音变音”(例如 ß、ä、ü)只是垃圾字符。 我知道,这是关于字符集的问题,但我到底该怎么做?
这是代码的一部分:
URL obj = new URL( urlAsString );
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
on.setRequestMethod( "GET" );
我是否必须设置特殊请求属性或类似的内容?或者我必须以某种方式转换结果?
当我在网络浏览器地址行中输入“urlAsString”时,我得到了完美的结果,并且所有“Umlaute”都是正确的。
感谢您的任何提示! 托尔斯滕
您必须在响应部分设置字符集,而不是在请求部分,例如
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"));
也许问题就在那里,但您没有在发布的代码中显示这部分。
你可以像下面这样尝试吗?在这里您可以设置内容类型和字符集编码为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 以获得更好的使用性和灵活性。
您在标头请求中添加:
httpGet.setHeader("Content-type", "application/json; charset=utf-8");
httpGet.setHeader("Accept", "application/json; charset=utf-8");
httpGet.setHeader("Content-Encoding", "UTF-8");