OK httpで中国語のファイル名をアップロードする時に不合格の問題を確認します。


理由:okhttpにcheckNameの関数があるので、headerの値をチェックします。
解決策:スクリーンを追加して、反射機構を利用してファイルのヘッダの内容を修正して、自分が先に打つ必要な頭を探してからその対象の中に閉じ込めて、それから層ごとにセットして修正します。参考コードは以下の通りです。
client = new OkHttpClient.Builder()
					.writeTimeout(30,TimeUnit.SECONDS)
					.connectTimeout(30,TimeUnit.SECONDS)
					.readTimeout(30,TimeUnit.SECONDS)
					.addInterceptor(new Interceptor() {
     
						@Override
						public Response intercept(Chain chain) throws IOException {
     
							Request request = chain.request();
							//         ,              ,         MultipartBody
							if(request.body() instanceof  MultipartBody){
     
								MultipartBody multipartBody = (MultipartBody) request.body();
								try{
     
									Field field = multipartBody.getClass().getDeclaredField("parts");
									field.setAccessible(true);
									List<MultipartBody.Part> object = (List<MultipartBody.Part>) field.get(multipartBody);
									//       part
									MultipartBody.Part filenamePart = object.get(1);
									String fileNameHeaders = GsonUtil.ObjectToJson(filenamePart.headers());
									//  header              
									int fileIndex = fileNameHeaders.indexOf("filename\\u003d\\\"");
									int png = fileNameHeaders.indexOf(".pdf");//             
									if(fileIndex == -1 || png == -1){
     
										//      
										Response response = chain.proceed(request);
										return response;
									}
									String fileNameURLEncodeStr = fileNameHeaders.substring(fileIndex+"filename\\u003d\\\"".length(),png);
									String fileNameURLDecodeStr = URLDecoder.decode(fileNameURLEncodeStr,"utf-8");
//								System.out.println("fileNameURLEncodeStr:"+fileNameURLEncodeStr);
//								System.out.println("fileNameURLDecodeStr:"+fileNameURLDecodeStr);
									//     
									fileNameHeaders = fileNameHeaders.replace(fileNameURLEncodeStr,fileNameURLDecodeStr);
									Headers filenamePartHeader = GsonUtil.JsonToObject(fileNameHeaders,
											new TypeToken<Headers>(){
     }.getType());
									//  filenamePart header
									Field headerField = filenamePart.getClass().getDeclaredField("headers");
									headerField.setAccessible(true);
									headerField.set(filenamePart,filenamePartHeader);
//								System.out.println(fileNameHeaders);
									field.set(multipartBody,object);
								}catch(Exception e){
     
//								e.printStackTrace();
									MyLog.info("             :"+e.toString());
								}
							}
							Response response = chain.proceed(request);
							return response;
						}
					})
					.build();