0

MS Web サービスから生成された XML を読み込もうとしています

URL page = new URL(address);
StringBuffer text = new StringBuffer();
HttpURLConnection conn = (HttpURLConnection) page.openConnection();
conn.connect();
InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());
BufferedReader buff = new BufferedReader(in);
box.setText("Getting data ...");
String line;
do {
  line = buff.readLine();
  text.append(line + "\n");
} while (line != null);
box.setText(text.toString());

また

URL u = new URL(address);
URLConnection uc = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {

    inputLine = java.net.URLDecoder.decode(inputLine, "UTF-8");
  System.out.println(inputLine);
}
in.close();

どのページも正常に読み取れますが、Web サービスの出力では、大なり記号と小なり記号が奇妙に読み取られます。

< を "& lt;" に読み替えます および > から "& gt;" へ ただし、スペースなしでここに入力すると、stackoverflow で < と > になります

助けてくださいありがとう

4

2 に答える 2

1

まず、この行に混乱があるようです:

inputLine = java.net.URLDecoder.decode(inputLine, "UTF-8");

これは、サーバーが提供するドキュメントのすべての行が URL エンコードされていることを期待していることを効果的に示しています。URL エンコーディングは、ドキュメント エンコーディングと同じではありません。

http://en.wikipedia.org/wiki/Percent-encoding

http://en.wikipedia.org/wiki/Character_encoding

あなたのコード スニペットを見ると、URL エンコーディング (パーセント エンコーディング) はあなたが求めているものではないと思います。

ドキュメントの文字エンコーディングに関して。この行で変換を行っています:

InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());

conn.getContent()バイトを操作するan を返しますInputStreamが、リーダーは文字を操作します - 文字エンコーディング変換はここで行われます。InputStreamReader2 番目の引数としてエンコーディングを取る他のコンストラクタをチェックアウトします。2 番目の引数がないと、Java のプラットフォームのデフォルトにフォールバックします。

InputStreamReader(InputStream in, String charsetName)

たとえば、コードを次のように変更できます。

InputStreamReader in = new InputStreamReader((InputStream) conn.getContent(), "utf-8");

しかし、本当の問題は、「サーバーがコンテンツを提供しているエンコーディングは何ですか?」ということです。サーバー コードも所有している場合は、utf-8. しかし、異なる可能性がある場合は、http ヘッダーを調べてContent-Type把握する必要があります。

String contentType = conn.getHeaderField("Content-Type");

の内容は次のcontentTypeようになります

text/plain; charset=utf-8

このフィールドを取得する簡単な方法は次のとおりです。

String contentEncoding = conn.getContentEncoding();

文字セットが提供されていない、またはヘッダーが提供されていない可能性が十分にあることに注意してください。そのContent-Type場合、適切なデフォルトにフォールバックする必要があります。

于 2011-10-23T10:03:27.920 に答える