0
URL url = new URL("http://www.example.com/data.php?q=%FD");
logger.info("url: " + url);
URI uri = url.toURI();
logger.info("uri ASCII: " + uri.toASCIIString());
logger.info("uri str  : " + uri.toString());
logger.info("query    : " + uri.getQuery());
logger.info("decoded  : " + URLDecoder.decode(ur.getRawQuery(), "WINDOWS-1252"));

String scheme = uri.getScheme();
String auth   = uri.getAuthority();
String path   = uri.getPath();
String query  = uri.getQuery();

URI cleanedURI = new URI(scheme, auth, path, query, null);
logger.info("cleaned uri ASCII: " + cleanedURI.toASCIIString());
logger.info("cleaned uri str  : " + cleanedURI.toString());

出力は次のとおりです。

url: http://www.example.com/data.php?q=%FD

uri ASCII: http://www.example.com/data.php?q=%FD
uri str  : http://www.example.com/data.php?q=%FD

query: q=�
decoded: q=ý

cleaned uri ASCII: http://www.example.com/data.php?q=%EF%BF%BD
cleaned uri str  : http://www.example.com/data.php?q=�

そのため、URI を部分に分割してから再度構築すると、元の URL を取得できません。元の URL (正しくパーセントでエンコードされた有効な URL) を取得するにはどうすればよいですか。

%EF%BF%BD を取得する代わりに、元の %3F を取得する必要があります。

(実際に私が達成しようとしているのは、フラグメントを削除するなど、URL の特定の部分をクリーンな方法で操作することですが、これは私の質問とはあまり関係ありません。)

4

1 に答える 1