これらのURLはユーザーによって更新されるため、私はいくつかのURLを毎日サーバーでテストする必要があります。ただし、これらのURLには、ドイツ語のウムラウトのような奇妙な文字が含まれています。 Basicly私がやっていることです:アイブ氏が見つけたものサーバーに送信されたURLのエンコーディング(クエリではない)
今for every URL in the list to check
URL u = new URL(the_url);
u.openConnection(..);
// read the content and handle it
は、org.apache.commons.codec.net.URLCodec
はのQueryStringに貼り付けるために、文字列をエンコードするための罰金であるということです、彼らの六角対応に奇妙なURLをエンコードするよう適切ではありません。ここではURLのいくつかの例は以下のとおりです。
- ます。http:// www.example COM/U /überraum-03/
- ます。http:// www.example COM/U /サンパウロ - サンパウロ - 男/
- http:// www.example.com/jp/hokeon-hellstrom/
最初の希望の結果は次のとおりです。
- ます。http:// www.example COM/U /%C3%9berraum-03/
実際のURLに特殊文字を変換するためのApache CommonsのやJava自体に任意のライブラリがあり、 (クエリーストリングではなく、同じ種類の文字を置き換えない)?
ありがとうございます。
編集 Firefoxが "yr.no/place/Norway/Nordland/Moskenes/Å/data.html" を翻訳します。 "yr.no/place/Norway/Nordland/Moskenes/%C3%85/data.html"に入力してください(最初のURLを入力してEnterキーを押し、URLを文書にコピーしてください)。これが実際の翻訳なので、私が探しているのはこの効果です。最も起こりそうなことは、Åが悪いことを知っているか、複数のバージョンを試しているか、サーバーの "Location"ヘッダーを受け入れていることです。どちらの方法でも、URLのサブセットのみに "Å"から "%C3%85"までの情報があります。これが私たちが必要とする機能です。
編集 私は、commentorによって与えられたコードが悲しいことにうまく動作しないことを確認しました。たとえば、次のように試してみてください:
try{
String urlStr = "http://www.yr.no/place/Norway/Nordland/Moskenes/Å/data.html";
URL u=new URL(urlStr);
URI uri = new URI(u.getProtocol(),
u.getUserInfo(), u.getHost(), u.getPort(),
u.getPath(), u.getQuery(),
null); // removing ref
URL urlObj = uri.toURL();
HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
connection.setInstanceFollowRedirects(false);
connection.connect();
for (int i=0;i<connection.getHeaderFields().size();i++)
System.out.println(connection.getHeaderFieldKey(i)+": "+connection.getHeaderField(i));
System.exit(0);
}catch(Exception e){e.printStackTrace();};
奇妙なことに、エンコードされた部分も機能しません。
へ
http://www.example.com/u/håkon-hellström/
変更は私が(他の文字がエンコードされている)だけASCIIに結果のURLを制限するために私の答えを更新しました。私はこれがあなたが探している結果だと信じています。 – Dev