2011-02-27 11 views
2

私は(ポリッシュ - ISO-8859-2)latata.pl/pl.phpからデータを取得し、すべての記号を表示しようウェブサイトから非ラテン文字を取得する方法は?

final URL url = new URL("http://latata.pl/pl.php"); 
    final URLConnection urlConnection = url.openConnection(); 
    final BufferedReader in = new BufferedReader(new InputStreamReader(
      urlConnection.getInputStream())); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) { 
     System.out.println(inputLine); 
    } 
    in.close(); 

それは動作しません。 :(任意のアイデア?

答えて

3

InputStream reader has multiple constructors、あなたはこれらのコンストラクタのいずれかで、このような場合のエンコーディングを指定します(/しなければならない)ことができます。

3

あなたInputStreamReader使用してTCP接続を介して戻ってくるバイトを変換しようとしますあなたのプラットフォームのデフォルトのエンコーディング(恐らくUTF-8か恐ろしいWindowsのものの1つ)である可能性がありますあなたは明示的にエンコーディングを指定する必要があります

ウェブサーバがうまくやっているとすれば、 (どちらが忘れていますか)、あるいはiso-8859-2と仮定することができますが、それは後で中断する可能性があります。

2

これはコメントには長すぎますが、そのウェブページを設定した人はいますか?君は?私が見ることができるから、それは正しく見えません。ここで

あなたが取り戻すものです:

<html> 
<head></head> 
<body>±ê³ó¿¡Ê£¯¬</body> 
</html> 

そして、それは、あなたのページがブラウザから表示されます方法は次のとおりです。

$ telnet latata.pl 80 
Trying 91.205.74.65... 
Connected to latata.pl. 
Escape character is '^]'. 
GET /pl.php HTTP/1.0 
Host: latata.pl 

HTTP/1.1 200 OK 
Date: Sun, 27 Feb 2011 13:49:19 GMT 
Server: Apache/2 
X-Powered-By: PHP/5.2.16 
Vary: Accept-Encoding,User-Agent 
Content-Length: 10 
Connection: close 
Content-Type: text/html 

����ʣ��Connection closed by foreign host. 

HTMLは単純です。そのHTMLページにの文字セットが指定されていない正当な理由はありますか?

+0

いいえ、応答にHTMLタグはありません。 –

+0

@Michael Konietzka:「検査要素」を実行すると、Chromeによって自動的に挿入されます。しかし、それは実際にOPが設定したひどいウェブサーバーです(私は彼がそのウェブサーバーを設定し、文字エンコーディングに関する彼の混乱のレベルを見ています) – SyntaxT3rr0r

2

あなたのPHPスクリプトpl.phpの出力に問題があります。宣言された文字セットを持たないHTTPヘッダーContent-Type: text/htmlが設定されています。宣言された文字セットがなければ、クライアントはHTTP仕様に関してそれがISO-8859-1であると仮定しなければなりません。 ISO-8859-1と解釈された場合、送信される本文は±ê³ó¿¡Ê£¯¬です。それは

Content-Type: text/html; charset=ISO-8859-2

として宣言された場合、PHPスクリプトによってsendedでは

バイトは、あなたが障害のあるISO-8859-1エンコーディングを変換する簡単なコードの断片でこれを確認することができąęłóżĄĘŁŻŹを表していますISO-8859-2に:

final String test="±ê³ó¿¡Ê£¯¬"; 
String corrupt=new String(test.getBytes("ISO-8859-1"),"ISO-8859-2"); 
System.out.println(corrupt);  

出力は、いくつかのポリッシュ文字ですąęłóżĄĘŁŻŹ、となります。

クイックフィックスとして、Content-Type: text/html; charset=ISO-8859-2をHTTPヘッダーとして出力するように、PHPスクリプトの文字セットを設定します。

しかし、とにかくUTF-8エンコードされた出力に切り替えることを考えてください。

2

誰かが既に述べたように、応答に指定された文字セットエンコーディングはありません。レスポンス文書をISO-8859-2(通常は中央ヨーロッパで使用される)として強制的に表示すると、合法的な磨き文字が表示されるため、実際に使用されているエンコーディングと見なします。エンコーディングが指定されていないので、ISO-8859-1はこれがデフォルトであるとみなされます。

応答ヘッダーには、ヘッダーを含める必要があります。Content-Type:text/html; charset = ISO-8859-2文字コードポイントが正しく解釈されるようにします。この文字セットは、応答を作成するときに使用されます。