Мне нужно получить HTML с турецких веб-страниц, используя Java.Тем не менее, я обнаружил, что мой 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
Если я использую следующий код 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>
Но я хочу иметь возможность получить HTML с Java.Кто-нибудь знает, как я могу заставить это работать?
Спасибо!
Чтобы подобрать определенные турецкие символы, используйте кодировку "UTF8", которая задается в качестве параметра для объекта InputStreamReader. И вы должны использовать BufferedReader, как предложил Якуб Заверка в своем ответе. Полностью рабочая версия вашего кода:
InputStreamReader
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 ); }
readLine() в DataInputStream устарело.Вы должны использовать Reader, который правильно обрабатывает преобразование байтов в символы.
readLine()
DataInputStream
Если вы используете InputStreamReader, вы можете указать кодировку в конструкторе, а если вы поместите его в BufferedReader, вы можете читать строки.
BufferedReader
вы можете иметь
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"))
Где «UTF-8» может быть заменен любой кодировкой, которая вам нужна.