使用Java获取HTML - 某些字符未正确获取

时间:2012-03-10 12:20:38

标签: java html html-parsing

我需要使用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>

你可以看到标题不正确:Ãrnnler应该是Ü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。有谁知道我怎么能这样工作?

谢谢!

2 个答案:

答案 0 :(得分:2)

readLine()中的

DataInputStream已弃用。您应该使用Reader,它可以正确处理从字节到字符的转换。

如果您使用InputStreamReader,则可以在构造函数中指定编码,如果将其包装在BufferedReader中,则可以读取行。

而不是

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

你可以

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

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

答案 1 :(得分:2)

要获取某些土耳其语字符,请使用作为InputStreamReader对象的参数提供的编码“UTF8”。你应该使用BufferedReader,正如Jakub Zaverka在他的回答中所建议的那样。完全正常运行的代码版本:

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 );
}