在利用httpclient向服务器post数据时,有两种中文问题;
1.filed字段值的中文
2.file名的中文
对于第一种,参看StringPart;其源代码有这样一段:
private byte[] getContent() {
if (content == null) {
content = EncodingUtil.getBytes(value, getCharSet());
}
return content;
}
protected void sendData(OutputStream out) throws IOException {
LOG.trace("enter sendData(OutputStream)");
out.write(getContent());
}
可以看出在发送数据时其调用了EncodingUtil的getBytes方法(利用了你通过setCharSet设置的编码)
因此,只要你在代码中这样:
StringPart part = new StringPart(name, value);
part.setCharSet("GBK");
中文就没有问题了
对于第二种,参看FilePart;其源代码中有这样一段:
protected void sendDispositionHeader(OutputStream out)
throws IOException {
LOG.trace("enter sendDispositionHeader(OutputStream out)");
super.sendDispositionHeader(out);
String filename = this.source.getFileName();
if (filename != null) {
out.write(FILE_NAME_BYTES);
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getAsciiBytes(filename));
out.write(QUOTE_BYTES);
}
}
可以看出在转换文件名时,用的方法是EncodingUtil.getAsciiBytes(),查看这个方法源码为data.getBytes("US-ASCII"),因此中文文件名必定乱码,不管你是否调用了setCharSet("GBK")方法。
解决很简单:
out.write(EncodingUtil.getBytes(filename, getCharSet()));
看了网上好多文章,好多都说改EncodingUtil类,其实我觉得改FilePart更好一些
分享到:
相关推荐
利用c# httpclient ,post json数据到web api
httpclient post方式发送json格式数据,需要的相关包。
httpClient post 上传图片 下载下来 修改下 上传和下载的uri
try(CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(url); StringEntity stringEntity = new StringEntity(params, Charset.forName("UTF-8")); ...
HttpClient实现POST GET和文件下载 HttpClient实现POST GET和文件下载
httpclient.jar包及其POST方法使用例子
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
其中包含项目post-demo定义接口;包含另一个项目httpclient-demo使用工具类发送post请求调用接口。详细内容查看博客 httpclient发送post请求
HttpClient post请求(用于key-value格式的参数), post请求(用于请求json格式的参数),加入了请求头以及token认证,成功之后读取服务器返回过来的json字符串数据
httpclient的用法,发送get请求和post请求,设置header
这个代码的作用是使用HttpClient发送POST请求,并获取响应内容。具体来说,它创建了一个HttpClient实例和一个HttpPost对象,设置了请求的URL、请求头和请求体,然后执行请求并获取响应。最后,它将响应内容输出到...
(完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc
解决HttpClient中文乱码问题jar文件
我使用的是httpClient 进行内部转发 我们在A的服务器上,将前台的文件流,通过httpClient传输到B的服务器上(B的服务器通过控制层接受A传输的文件流,让后保存在B的服务器上。返回一个json结果)
完整的上传实例包括图片和参数配置,可以通过该样例进行扩展使用
httpclient中文版本,HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 ...
NULL 博文链接:https://cxl2012.iteye.com/blog/2210521
服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。