关于HttpClient上传文件附件时,文件名中的中文会变为乱码 您所在的位置:网站首页 h5中文名称 关于HttpClient上传文件附件时,文件名中的中文会变为乱码

关于HttpClient上传文件附件时,文件名中的中文会变为乱码

2024-07-16 08:19| 来源: 网络整理| 查看: 265

前段时间在开发一套对接第三方系统的接口时,涉及到一个附件传输的接口。接口主要使用HttpClient发送请求,请求体中包含附件对象,Content-Type为multipart/form-data格式。在本地环境测试时一切正常,上到测试环境后事情开始变得诡异起来。。。 原本的附件在通过postman工具上传到系统的附件接口后,到达测试环境的文件名称突然变成了乱码。例如 ”测试pdf.pdf“变成了"??pdf.pdf"。包含中文的部分全部变成了乱码。 因此第一时间想到的是文件复制以及文件名称转码操作,由于不确定测试环境所包含的文件名到底是何种类型进行的编码,这里选择通过遍历jdk提供的编码集合打印出对应解码的结果。

public String getCharsetEncoding(String attachmentName){ StringBuilder sb = new StringBuilder("字符编码检查工具"); for (String s : Charset.availableCharsets().keySet()) { String convert = null; try { convert = new String(attachmentName.getBytes(s), StandardCharsets.UTF_8); sb.append(s).append(" to convert = ").append(convert).append(" ;"); System.out.println(s+"to convert = "+convert); } catch (Exception e) { System.out.println(s+"编码不兼容"); } } return sb.toString(); }

将这段代码上传到测试环境开始测试**(切记此类代码必须删除)**

通过打印出来的日志可以发现,以上的方法无法找到正确的编码格式,打印出来的还是一坨乱码,即使遍历了Charset.availbleCharsets()中的所有字符编码集进行解码再编码,都无法获取到正确的中文字符解码结果。由此可判断,问题并不是出在解码这一段。乱码的本质是字符串编码与解码方式的不匹配,因此问题可能是由于字符串编码格式的问题,因此我们这边又尝试了通过httpClient自行设置编码格式进行文件传输,在上传文件前对文件名称先进行一次转码。 经过测试,文件名称依然是乱码,证明此乱码发生过程可能不在我们业务代码控制范围中,控制变量后发现只有Multipart/form-data格式下会出现这种问题。大致可以确定问题所在,具体产生这个问题的原因后续还需要继续排查。 先说一下对应的解决方式:由于文件名称乱码,因此我们决定采用新加参数传输文件名称的方式,文件名称通过URLEncode等方式进行加密一次之后,再对文件进行更名处理。处理完成后即可正常展示文件名称。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有