我需要使用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。有谁知道我怎么能这样工作?
谢谢!
答案 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 );
}