2012-03-10 52 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