2

latata.pl/pl.php からデータを取得して、すべての記号を表示しようとしました (研磨 - iso-8859-2)

 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();

うまくいきません。:( 何か案は?

4

5 に答える 5

3

InputStream リーダーには複数のコンストラクターがあり、これらのコンストラクターのいずれかでそのような場合にエンコーディングを指定できます (する必要があります)。

于 2011-02-27T13:41:34.697 に答える
3

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

Web サーバーが適切に機能していると仮定すると、HTTP ヘッダーの 1 つで正しいエンコーディングを見つけることができます (どのヘッダーかは忘れました)。または、それが iso-8859-2 であると仮定することもできますが、後で壊れる可能性があります。

于 2011-02-27T13:41:45.697 に答える
2

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

php-script によって送信されたバイトは、次のąęłóżĄĘŁŻŹように宣言されているかどうかを表しています。

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

これは、問題のある 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);    

出力はąęłóżĄĘŁŻŹ、ポーランド語の文字である になります。

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

ただし、とにかく UTF-8 でエンコードされた出力に切り替えることを検討する必要があります。

于 2011-02-27T15:15:51.667 に答える
2

これはコメントするには長すぎますが、その Web ページを設定したのは誰ですか? 君は?私が見る限り、それは正しくないように見えます。

返される内容は次のとおりです。

$ 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>
<head></head>
<body>±ê³ó¿¡Ê£¯¬</body>
</html>

これがブラウザからのページの表示方法です。その HTML ページで文字セットが指定されていない正当な理由はありますか?

于 2011-02-27T13:55:49.927 に答える
2

誰かがすでに述べているように、応答に指定された文字セットエンコーディングはありません。応答ドキュメントを強制的に ISO-8859-2 (中央ヨーロッパで一般的に使用される) として表示すると、正当なポーランド語の文字が表示されるため、これが実際に使用されているエンコーディングであると思います。エンコードが指定されていないため、ISO-8859-1 がデフォルトとして想定されます。

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

于 2011-02-27T15:21:22.413 に答える