2012-03-10 50 views
1

我需要使用Java从土耳其网页抓取HTML。但是,我发现我的Java代码无法拾取某些土耳其字符。下面是我使用的Java代码:使用Java获取HTML - 某些字符未正确提取

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。有谁知道我如何才能使这个工作?

谢谢!

回答

2

readLine() in DataInputStream is Deprecated。您应该使用Reader,它可以正确处理从字节到字符的转换。

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

而不是

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

你可以有

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

其中 “UTF-8” 可以通过任何编码来代替你的需要。

+0

谢谢,这有助于 – Andrew 2012-03-10 15:37:01

2

要选取某些土耳其字符,请使用编码“UTF8”,该编码作为InputStreamReader对象的参数给出。你应该使用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); 
} 
+0

也为此感谢 – Andrew 2012-03-10 15:37:43