【问题标题】:fetch HTML with Java - some characters not fetched correctly使用 Java 获取 HTML - 某些字符未正确获取
【发布时间】:2012-03-27 15:07:54
【问题描述】:

我需要使用 Java 从土耳其网页中获取 HTML。但是,我发现我的 Java 代码无法识别某些土耳其语字符。这是我正在使用的 Java 代码:

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.URL;

public class fetchHTML {
public static void main(String[] args) throws Exception {

    URL urls = new URL("http://www.parkbravo.com.tr/pantolon.php");
    InputStream is = urls.openStream();  
    DataInputStream dis = new DataInputStream(new BufferedInputStream(is));

    String line;

    while ((line = dis.readLine()) != null) {
        System.out.println(line);
    }
}
}

这段代码的前几行输出是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<html lang="tr" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>ParkBravo - Ãrünler - Pantolonlar</title>

你可以看到标题不正确:Ãrünler应该是Ürünler

如果我使用以下 Python 代码获取 HTML:

import urllib2

url = 'http://www.parkbravo.com.tr/pantolon.php' 

usock = urllib2.urlopen(url)
data = usock.read()
usock.close()

print data

那么输出是正确的。标题出来为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<html lang="tr" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>ParkBravo - Ürünler - Pantolonlar</title>

但我希望能够使用 Java 获取 HTML。有谁知道我怎样才能让它工作?

谢谢!

【问题讨论】:

    标签: java html html-parsing


    【解决方案1】:

    DataInputStream 中的readLine() 已弃用。您应该使用阅读器,它可以正确处理从字节到字符的转换。

    如果你使用InputStreamReader,你可以在构造函数中指定编码,如果你用BufferedReader包裹它,你可以读取行。

    代替

     DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
    

    你可以拥有

     BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"))
    

    “UTF-8”可以替换为您需要的任何编码。

    【讨论】:

      【解决方案2】:

      要获取某些土耳其语字符,请使用编码“UTF8”作为InputStreamReader 对象的参数。你应该使用 Jakub Zaverka 在他的回答中建议的 BufferedReader 。您的代码的完整工作版本:

      public static void main ( String [] args ) throws Exception
      {
          URL url = new URL( "http://www.parkbravo.com.tr/pantolon.php" );
          InputStream is = url.openStream();
          BufferedReader r = new BufferedReader( new InputStreamReader( is, "UTF8" ) );
          String line = "";
      
          while ( ( line = r.readLine() ) != null )
              System.out.println( line );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多