繁体   English   中英

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

[英]How to get non-latin characters from website?

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

 final URL url = new URL("http://latata.pl/pl.php");
    final URLConnection urlConnection = url.openConnection();
    final BufferedReader in = new BufferedReader(new InputStreamReader(
            urlConnection.getInputStream()));
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }
    in.close();

它不起作用。 :( 有任何想法吗?

InputStream阅读器有多个构造函数 ,您可以(应该/必须)在这些构造函数之一中指定编码。

您的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标头Content-Type: text/html集。 如果没有声明的字符集,客户端必须假定它是关于HTTP规范的ISO-8859-1 如果被解释为ISO-8859-1,被发送的身体是±ê³ó¿¡Ê£¯¬

php-script ąęłóżĄĘŁŻŹ的字节代表ąęłóżĄĘŁŻŹ如果它被声明为

Content-Type: 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脚本中设置charset以输出Content-Type: text/html; charset=ISO-8859-2 Content-Type: text/html; charset=ISO-8859-2作为HTTP-Header。

但是你应该考虑切换到UTF-8编码输出。

正如某人已经声明的那样,没有为响应指定charset编码。 强制将响应文档视为ISO-8859-2(通常在中欧使用)会导致显示合法的抛光字符,因此我假设这是实际使用的编码。 由于未指定编码,因此将假定为ISO-8859-1,因为这是默认值。

响应头需要包含标题Content-Type:text / html; charset = ISO-8859-2,用于正确解释字符代码点。 构造响应InputStream时将使用此charset。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM