0

画像のURLを読み込もうとしています。Javaのドキュメントに記載されているように、私はURLをURIに変換してみました

String imageURL = "http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg";
URL url = new URL(imageURL);
url = new URI(url.getProtocol(), url.getHost(), url.getFile(), null).toURL();  
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();

ファイルhttp://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpgのJava.io.FileNotFound例外が発生し ます

私は何を間違っているのですか、そしてこのURLをエンコードする正しい方法は何ですか?

更新:
私はRSSフィードを読むためにローマを使用しています。BalusCからの提案を受けて、さまざまな段階からの生の入力を印刷しましたが、ROMErssパーサーはUTF-8ではなくISO-8859-1を使用しているようです。

4

3 に答える 3

3

ここでは正常に動作します(403を返しますが、少なくとも404ではありません):

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();

403が返されないように修正すると、画像は正しく表示されなくなります。

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0");
InputStream input = connection.getInputStream();
OutputStream output = new FileOutputStream("/pic.jpg");
for (int data = 0; (data = input.read()) != -1;) {
    output.write(data));
}

だからあなたの問題はどこかにあります。変換は実際には必要ありません。初期URLは有効です。

間違った文字エンコードを使用して、バイナリソースから実際のURLを取得している可能性がありますか?の遷移は、元のソースがUTF-8でエンコードされており、コードがUTF-8の代わりにISO-8859-1を使用して誤っéé読み込んだことを示しています。

更新:または、実際にJavaソースコードにハードコーディングし、間違ったエンコーディングを使用してソースファイル自体を保存した可能性があります。UTF-8を使用してファイルを保存するようにエディター(Eclipse)を構成しました-Dfile.encodingが、これもデフォルトでUTF-8に設定されているため、私のマシンで機能する理由が説明されます;)

アップデート2:コメントによると、一言で言えば、ソースファイルの保存に使用されるエンコーディング-Dfile.encodingがランタイムプラットフォームのデフォルトと一致する場合(そして問題の文字エンコーディングがをサポートしている場合é)、すべてが正常に機能するはずです。コードを配布したいときにこれらの予期しない衝突を回避するには、ハードコードされた非ASCII文字をUnicodeエスケープに置き換えることをお勧めします。

于 2010-03-14T17:16:32.890 に答える
0

技術的な答えは「できない」だと思います。標準では、非ASCII文字をURLで使用することはできません。また、一部のASCII文字でさえ、「%XX」構文でエスケープする必要があります。XXは文字のASCII値です。

どちらかといえば、「%E9」で「é」をエスケープできますが、これはサーバーがこれをISO-8859-1に準拠した文字のエンコードとして解釈することに依存しています。これは技術的には許可されていませんが、多くのサーバーがこれを行うと思います。

于 2010-03-14T17:19:53.337 に答える
0

ソースファイルのエンコーディングが原因です。IDEを使用して、それをUTF-8に設定し、URLを再貼り付けします。

于 2010-03-15T21:26:31.740 に答える