httpClientのPOSTメソッドを使用してWebサービスサービスを呼び出すと、中国語の文字化け文字が生成されます

今日、httpClientを使用してWebサービスサービスをリモートで呼び出す必要があるプロジェクトに遭遇しました。このプロジェクトでは、サービス側とサーバー側の両方が使用されます

org.springframework.web.filter.CharacterEncodingFilterフィルターは、POSTによって送信されたデータのエンコード形式を設定するために使用されますが、サーバーによって取得された中国語のデータはまだ文字化けしています。

以下は、私が書いたhttpClientツールクラスのメソッドです。

public static String doPost(String url, Map<String, String> param) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 创建参数列表
			if (param != null) {
				List<NameValuePair> paramList = new ArrayList<>();
				for (String key : param.keySet()) {
					paramList.add(new BasicNameValuePair(key, param.get(key)));
				}
				// 模拟表单,此时需要设置数据的编码格式,否则默认会以ISO_8859_1进行编码
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"UTF-8");
				httpPost.setEntity(entity);
			}
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return resultString;
	}

エンコード方法がUrlEncodedFormEntityentity = new UrlEncodedFormEntity(paramList、 "UTF-8");で指定されていない場合、ソースコードを確認した後、デフォルトでiso-8859-1を使用してデータをエンコードすることがわかります。コードが文字化けする原因です。



この問題は解決されましたが、まだ疑問があります。org.springframework.web.filter.CharacterEncodingFilterフィルターを使用して投稿データをエンコードしているのに、httpCilentで指定する必要があるのはなぜですか。マスターが知っているなら、私に知らせてください!

おすすめ

転載: blog.csdn.net/Jack_PJ/article/details/80300930
おすすめ