Java URLConnection の URL には、スペースと中国語の処理が含まれています

      最近、ネットワーク リソースから画像をダウンロードする必要があったため、Pidianpidian はコードを入力し始め、最終的にいくつかのコードに遭遇しました。. . 額。. . 少し「トリッキーな」(文句を言わなければならない) 問題です。

HttpURLConnection の簡単な紹介

Java HttpURLConnection クラスは、http 固有の URLConnection です。HTTP プロトコルでのみ機能します。
HttpURLConnection クラスの助けを借りて、ヘッダー情報、ステータス コード、レスポンス コードなど、任意の HTTP URL の情報を取得できます。

  • http プロトコルのみをサポート
  • リクエスト ヘッダーやステータス コードなどの情報は、HttpURLConnection を介して取得できます。

より詳細な紹介については、この大物によって書かれた記事を読むことができます - Java での HttpURLConnection の使用の詳細な説明と概要。HttpClient の使用

真の知識は実践から生まれる

ウェブから画像をダウンロードする

public static InputStream readImage(String encodeUrl) {
    
    
	try {
    
    
		URL url = new URL(encodeUrl);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		// conn.connect();
		// 防止屏蔽程序抓取而返回403错误
		conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
		conn.setRequestProperty("Accept-Encoding", "identity");
		// 获取文件转化为byte流
		InputStream inputStream = conn.getInputStream();
		return inputStream ;
	} catch (Exception e) {
    
    
		log.info("下载网络图片url:{}失败!错误信息:{}", url, e.getMessage());
		e.printStackTrace();
		return null;
	}
}

問題に遭遇する

URL に中国語が含まれていて、ダウンロードに失敗する

URL の中国語部分をトランスコードする

URLEncoder.encode(url, "utf-8");

URL にスペースが含まれており、ダウンロードに失敗する

この問題は、バックグラウンド トランスコーディングとブラウザ トランスコーディングの間の落とし穴と見なすことができます。=_=||
URLEncoder のスペースは + でエンコードされますが、URI のスペースは %20 です

String encodeUrl = URLEncoder.encode(url, "utf-8");
encodeUrl = encodeUrl.replaceAll("\\+", "%20");

参考文献

Java での HttpURLConnection の使用に関する詳細な説明と概要 HttpURLConnection クラス
java. HttpClient の使用

おすすめ

転載: blog.csdn.net/huhui806/article/details/126008754