Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从网站获取非拉丁字符?_Java_Encoding_Character Encoding_Urlconnection - Fatal编程技术网

Java 如何从网站获取非拉丁字符?

Java 如何从网站获取非拉丁字符?,java,encoding,character-encoding,urlconnection,Java,Encoding,Character Encoding,Urlconnection,我尝试从latata.pl/pl.php获取数据并查看所有符号(polish-iso-8859-2) 它不起作用(有什么想法吗?在这种情况下,您可以(应该/必须)在这些构造函数中指定编码。您的InputStreamReader将尝试使用您的平台默认编码(很可能是UTF-8或可怕的Windows编码之一)转换通过TCP连接返回的字节。您应该明确指定编码 假设web服务器做得很好,您可以在其中一个HTTP头中找到正确的编码(我忘了是哪一个)。或者您可以假设它是iso-8859-2,但稍后可能会中断。

我尝试从latata.pl/pl.php获取数据并查看所有符号(polish-iso-8859-2)


它不起作用(有什么想法吗?

在这种情况下,您可以(应该/必须)在这些构造函数中指定编码。

您的
InputStreamReader
将尝试使用您的平台默认编码(很可能是UTF-8或可怕的Windows编码之一)转换通过TCP连接返回的字节。您应该明确指定编码


假设web服务器做得很好,您可以在其中一个HTTP头中找到正确的编码(我忘了是哪一个)。或者您可以假设它是iso-8859-2,但稍后可能会中断。

这对于评论来说太长了,但谁设置了该网页?您?从我的角度看,它看起来不正确

以下是您得到的反馈:

$ telnet latata.pl 80
Trying 91.205.74.65...
Connected to latata.pl.
Escape character is '^]'.
GET /pl.php HTTP/1.0
Host: latata.pl

HTTP/1.1 200 OK
Date: Sun, 27 Feb 2011 13:49:19 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.16
Vary: Accept-Encoding,User-Agent
Content-Length: 10
Connection: close
Content-Type: text/html

����ʣ��Connection closed by foreign host.
HTML只是:

<html>
<head></head>
<body>±ê³ó¿¡Ê£¯¬</body>
</html>

±ê³ó¿¡Ê£¯¬

这就是您的页面在浏览器中的显示方式。在HTML页面中没有指定字符集是否有正当理由?

php脚本
pl.php
的输出有错误。有一个HTTP头
内容类型:text/HTML
集没有声明的字符集。如果没有声明的字符集,客户端必须假定它是
ISO-8859-1
关于HTTP规范。如果解释为ISO-8859-1,则发送的正文为

php脚本发送的字节表示
如果声明为

内容类型:text/html;charset=ISO-8859-2

您可以使用简单的代码片段对此进行检查,该代码片段将错误的ISO-8859-1编码转换为ISO-8859-2:

final String test="±ê³ó¿¡Ê£¯¬";
String corrupt=new String(test.getBytes("ISO-8859-1"),"ISO-8859-2");
System.out.println(corrupt);    
输出将是
波兰字符

作为一个快速修复方法,将php脚本中的字符集设置为将
内容类型:text/html;charset=ISO-8859-2
输出为HTTP头


但无论如何,您应该考虑切换到UTF-8编码输出。

正如有人已经指出的,没有为响应指定字符集编码。强制将响应文档视为ISO-8859-2(通常在中欧使用)结果显示合法的波兰语字符,因此我假设这是实际使用的编码。由于未指定编码,因此将假设ISO-8859-1为默认编码


响应标题需要包含标题内容类型:text/html;charset=ISO-8859-2,以便正确解释字符代码点。在构造响应
InputStream

时将使用此字符集。否,响应中没有html标记。@Michael Konietzka:Chrome正在插入它们当你做一个“inspect element”的时候很浪漫。但是,是的,OP确实设置了一个糟糕的Web服务器(我认为是他设置了这个Web服务器,看到了他在字符编码方面的混乱程度;)
final String test="±ê³ó¿¡Ê£¯¬";
String corrupt=new String(test.getBytes("ISO-8859-1"),"ISO-8859-2");
System.out.println(corrupt);