java - http 响应中出现无法读取的字符

标签 java http post character

请帮帮我。 我在java中向http://ind-kod.org.ua/cgi-bin/decodecode.cgi?c=3255101113-发出http post请求例如。 之后,我收到回复。响应包含不可读的字符

Немного о внештатном

我在控制台中看到的响应。

我应该怎么做才能正确读取响应?非常感谢。

我的 PC-Windows 7(64 位),面向 Web 开发人员的 Eclipse Java EE IDE。

版本:Luna 服务版本 2 (4.4.2) 版本号:20150219-0600

这是我的 Java 代码。

        final String USER_AGENT = "Mozilla/5.0";
    // http://ind-kod.org.ua/cgi-bin/decodecode.cgi?c=3255101113

    URL url = new URL("http://ind-kod.org.ua/cgi-bin/decodecode.cgi");
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("User-Agent", USER_AGENT);
    conn.setRequestProperty("Content-Type", "text/html");
    conn.setRequestProperty("Accept-Encoding", "gzip");
    conn.setDoOutput(true);


    OutputStreamWriter writer = new OutputStreamWriter(
            conn.getOutputStream());

    writer.write("c=3255101113");
    writer.flush();



    InputStream gzippedResponse = conn.getInputStream();
    GZIPInputStream gis = new GZIPInputStream(gzippedResponse);
    InputStreamReader inputStreamReader = new InputStreamReader(gis);
    BufferedReader reader = new BufferedReader(inputStreamReader);

    String readed;
    String line;
    StringBuffer response = new StringBuffer();
    while ((readed = reader.readLine()) != null) {

        response.append(readed);
    }
    writer.close();
    reader.close();

    System.out.println(response.toString());

这是我的回应。

</head>
<body bgcolor=#00eeff text=#000000>

<table border=0 align=center cellspacing=0 cellpadding=0 width=800px>
<tr><td style="border: solid 1px #ffffff; background: #cccccc;">


<table border=0 align=center cellspacing=0 cellpadding=0 width=100%>
<tr><td>

<!-- Ukrainian Banner Network 160С…60 START -->
<center><script>
//<!--
user = "74694";
page = "2";
pid = Math.round((Math.random() * (10000000 - 1)));
document.write("<iframe src='http://banner.kiev.ua/cgi-bin/bi.cgi?h" +
user + "&amp;"+ pid + "&amp;" + page + "&amp;5' frameborder=0 vspace=0 hspace=0 " +
" width=160 height=60 marginwidth=0 marginheight=0 scrolling=no>");
document.write("<a href='http://banner.kiev.ua/cgi-bin/bg.cgi?" +
user + "&amp;"+ pid + "&amp;" + page + "&amp;5' target=_top>");
document.write("<img border=0 src='http://banner.kiev.ua/" +
"cgi-bin/bi.cgi?i" + user + "&amp;" + pid + "&amp;" + page +
"&amp;5' width=160 height=60 alt='Ukrainian Banner Network'></a>");
document.write("</iframe>");
//-->
</script><br>
<small><a href=http://banner.kiev.ua/ target=_top>Украинская Баннерная Сеть</a></small>
</center>
<!-- Ukrainian Banner Network 160С…60 END -->
</td>
<td>
<!-- Ukrainian Banner Network 468x60 START -->
<center><script>
//<!--
user = "74694";
page = "2";
pid = Math.round((Math.random() * (10000000 - 1)));
document.write("<iframe src='http://banner.kiev.ua/cgi-bin/bi.cgi?h" +
user + "&amp;"+ pid + "&amp;" + page + "' frameborder=0 vspace=0 hspace=0 " +
" width=468 height=60 marginwidth=0 marginheight=0 scrolling=no>");
document.write("<a href='http://banner.kiev.ua/cgi-bin/bg.cgi?" +
user + "&amp;"+ pid + "&amp;" + page + "' target=_top>");
document.write("<img border=0 src='http://banner.kiev.ua/" +
"cgi-bin/bi.cgi?i" + user + "&amp;" + pid + "&amp;" + page +
"' width=468 height=60 alt='Украинская Баннерная Сеть'></a>");
document.write("</iframe>");
//-->
</script><br>
<small><a href=http://banner.kiev.ua/ target=_top>Украинская Баннерная Сеть</a></small>
</center>
<!-- Ukrainian Banner Network 468x60 END -->
</td>
<td>
<!-- Ukrainian Banner Network 160С…60 START -->
<center><script>
//<!--
user = "74694";
page = "2";
pid = Math.round((Math.random() * (10000000 - 1)));
document.write("<iframe src='http://banner.kiev.ua/cgi-bin/bi.cgi?h" +
user + "&amp;"+ pid + "&amp;" + page + "&amp;5' frameborder=0 vspace=0 hspace=0 " +
" width=160 height=60 marginwidth=0 marginheight=0 scrolling=no>");
document.write("<a href='http://banner.kiev.ua/cgi-bin/bg.cgi?" +
user + "&amp;"+ pid + "&amp;" + page + "&amp;5' target=_top>");
document.write("<img border=0 src='http://banner.kiev.ua/" +
"cgi-bin/bi.cgi?i" + user + "&amp;" + pid + "&amp;" + page +
"&amp;5' width=160 height=60 alt='Ukrainian Banner Network'></a>");
document.write("</iframe>");
//-->
</script><br>
<small><a href=http://banner.kiev.ua/ target=_top>Украинская Баннерная Сеть</a></small>
</center>
<!-- Ukrainian Banner Network 160С…60 END -->
</td></tr>
</table>

</td></tr>
</table>

<br>

<center>
<script type="text/javascript"><!--
google_ad_client = "pub-5530741219705142";
/* 728x15, создано 13.07.09 */
google_ad_slot = "1332980612";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center>

<br>

<table border=0 align=center cellspacing=0 cellpadding=5 width=800px>
<tr><td style="border: solid 1px #ff0000; font-size: 20px; background: #ff9999;">Внимание, информация ориентирована на граждан Украины!</td></tr>
</table>
<br>

<table border=0 align=center cellspacing=0 cellpadding=5 width=800px>
<tr><td style="border: solid 1px #007700; background: #00ccff; vertical-align: t
op;">

<p style="text-align: right;">Ссылка <b>другу</b> <a href="http://ind-kod.org.ua/">http://ind-kod.org.ua/</a></p>

<h2>Результат</h2>
<b>Дата рождения: <u>13.02.1989</u>, пол <u>М</u></b>

<br>
<br>

<hr>

<h3>Немного о внештатном</h3>
<p>Моя сотрудница с кодом <a href="/cgi-bin/decodecode.cgi?c=3127600040">31276<i>000</i>4<i>0</i></a> утверждает что ее дата рождения <b>17</b>.08.1985, при этом данная форма выводит результат "<b>18</b>.08.1985", дополнительная проверка тоже дает результат "<b>18</b>.08.1985". Моё мнение - сотрудники налоговой допустили ошибку при формировании кода.</p>
<!-- p>Если вы получили не правильный результат, и на все 100 уверены что дата и код верны - напишите пожалуйста о том <a href="mailto:pasha_pv@ukr.net?subject=decodecode">мне</a>. Я буду регистрировать такие случаи на этой странице с целью донести пользователями максимальную объективность.</p -->

</td></tr>
</table>



</body>
</html>

最佳答案

需要设置输入流的字符编码;您当前正在使用平台默认值 - 这可能与 gzip 压缩内容的编码不同。如何计算出正确的编码是另一个问题 - 您需要检查 Content-Type header 。

谢谢!你的回答对我有帮助。

改变

InputStreamReader inputStreamReader = new InputStreamReader(gis);

InputStreamReader inputStreamReader = new InputStreamReader(gis,StandardCharsets.UTF_8);

关于java - http 响应中出现无法读取的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828921/

相关文章:

windows - Windows 8 上的 "InternalIOException getAddrInfo: does not exist (error 10093)"

java - 将包含内容的目录从 HDFS 复制到本地文件系统

Java SSL : "fatal error: 80: ... unwrapping net record" after adding the HTTPS EndpointIdentificationAlgorithm

java - 从 Java (Apache HttpClient) 管理与 ASP.NET 站点的 session

django - 如何从本地主机(http)向django(https)发送POST请求?

java - 如何使用 Java 以编程方式登录 Facebook?

jquery - 使用 jquery .ajax() 重定向的 POST 之后获取实际 URL

Java将字节[]转换为图像

java - Mockito NotaMockException

android - 从服务器请求数据的最佳方式