问题:ImageIO.read 无法读取中文路径
String path = "http://127.0.0.1:8080/你过来呀/2023-01-30/533701000000090028/我过来了呀haha.jpg";
URL u=new URL(path);
BufferedImage coverImg = ImageIO.read(u);
上面代码会报下面错误:
:javax.imageio.IIOException: Can't get input stream from URL!
at javax.imageio.ImageIO.read(Unknown Source)
at com.zteits.atms.common.util.GraphicsUtil.comCarImage(GraphicsUtil.java:104)
at com.zteits.atms.common.util.GraphicsUtil.createQuJianXianShiBmp(GraphicsUtil.java:174)
at com.zteits.atms.modules.ill.service.impl.QuJianXianShiImpl.sendQuJianXianShiToLed(QuJianXianShiImpl.java:86)
at com.zteits.atms.modules.ill.service.impl.QuJianXianShiImpl$$FastClassBySpringCGLIB$$85a2252e.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationInterceptor.invoke(DynamicDataSourceAnnotationInterceptor.java:56)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.zteits.atms.modules.ill.service.impl.QuJianXianShiImpl$$EnhancerBySpringCGLIB$$56886768.sendQuJianXianShiToLed(<generated>)
at com.zteits.atms.modules.job.ill.AutoSendLEDJob.execute(AutoSendLEDJob.java:30)
at com.xxl.job.core.thread.JobThread.run(JobThread.java:152)
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: http://127.0.0.1:8080/你过来呀/2023-01-30/533701000000090028/我过来了呀haha.jpg
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
... 14 more
解决方案:对路径中文部分路径进行编码
// 对中文路径的中文部分进行编码
public static String encodeChinese(String url) throws UnsupportedEncodingException {
String resultURL = "";
//遍历字符串
for (int i = 0; i < url.length(); i++) {
char charAt = url.charAt(i);
//只对汉字处理
if (isChineseChar(charAt)) {
String encode = URLEncoder.encode(charAt+"","UTF-8");
resultURL+=encode;
}else {
resultURL+=charAt;
}
}
return resultURL;
}
String coverFilePath = "http://127.0.0.1:8080/你过来呀/2023-01-30/533701000000090028/我过来了呀haha.jpg";
String path = encodeChinese(coverFilePath);
URL u = new URL(path);
BufferedImage coverImg = ImageIO.read(u);
image.createGraphics().drawImage(coverImg, 0, 210, 320, 180, null);