HttpURLConnection使用POST方法参数乱码

摘要:
字符集=UTF-8;例如,//首先组装文本类型参数StringBuildersb=newStringBuilder();params.entrySet()){sb.append(PREFIX);sb.apped(“内容处置:sb.append[”内容类型:sb.aappend(“内容传输编码:

如题,HttpURLConnection使用POST方法发起http请求,参数通过form来传递(并非使用URL传递参数),出现了中文乱码的情况。

具体描述为:将请求参数以

Content-Disposition: form-data; name="name" 

value

形式上传,然后使用OutputStream.write传送,结果中文参数会出现乱码。

因为调用的方法是另外的人开发的系统,他们设定了通过UTF-8解码读取,所以要求调用时使用UTF-8进行编码后才可进行。

百度谷歌了一下解决方法,有教charset设置UTF8的,如

HttpURLConnection conn = null; 
conn.setRequestProperty("Content-Type",   "multipart/form-data; charset=UTF-8; ");

也有很复杂的,每次参数拼接都设定编码的,如

 // 首先组拼文本类型的参数
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet())
        {
            sb.append(PREFIX);
            sb.append(BOUNDARY);
            sb.append(LINEND);
            sb.append("Content-Disposition: form-data; name="" + entry.getKey() + """ + LINEND);
            sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
            sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
            sb.append(LINEND);
            sb.append(entry.getValue());
            sb.append(LINEND);
        }

但是,这些方法都试用遍了,还是没有起效。

后来我通过这样,解决了问题:

 StringBuffer strBuf = new StringBuffer();  

strBuf.append("Content-Disposition: form-data; name=""
+ name+ "" ");
strBuf.append(value);

out.write(strBuf.toString().getBytes("UTF-8"));  

代码不是完整的。不过做法是很简单的。只需保持原本StringBuffer将参数的key和value拼接在Content-Disposition: form-data; name=的过程,最后,out.write一个byte[]时,保证这个参数byte[]数组是UTF-8编码。原来的String.getBytes()换成String.getBytes("UTF-8")即可!

有类似疑难的情况,可以这样解决!

免责声明:文章转载自《HttpURLConnection使用POST方法参数乱码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flutter showModalBottomSheet max height启动tomcat时报内存溢出,Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Cadence】layer颜色的设置

前言 从Altium designer转到Cadence的OrCAD,除了操作上的不同外,还有配色的不同,导致看图的没有层次感,很慢,花了半天的时间研究OrCAD的配色、配置导入、导出。 并在后续链接上自己仿照Altium designer的风格进行的配色。 配色在哪里设置? 方法1:快捷键:Ctrl+F5 方法2:菜单栏 > Display >...

FastAPI框架快速构建高性能的api服务

https://cloud.tencent.com/developer/article/1431448 使用FastAPI可以非常快速的构建出一套高性能的api服务。下面通过实战演示一下: fastapi目前仅支持python 3.6+以上版本。 一、安装fastapi和uvicorn pip install fastapi pip install uvi...

Junit4单元测试

Junit4单元测试 官方文档 第一部分 用法 1.1 常见功能 典型配置: /*用于配置spring Boot中测试的环境*/ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MyBlogApplication.class) /* 开启事务...

(二)Java数组特性总结,你真的了解数组吗?

一、数组的特殊性 (一)数组标识符是一个引用,指向堆中创建的一个真实对象,这个对象(数组)保存了指向保存其他对象的引用。 (二)数组中保存引用类型时保存的是对象引用,基本数据类型数组保存基本数据的值。 (三)数组的length只表示数组能够容纳多少元素,不能保存实际保存的元素个数。 (四)多维数组可以使用Arrays.deepToString()将多维数组...

《第一行代码》书籍阅读笔记

注:书籍阅读笔记,方便查看第1章 开始启程,你的第一行Android代码 第2章 先从看得到的入手,探究活动 1.隐藏标题栏   在onCreate()方法中添加:   requestWindowFeature(Window.FEATURE_NO_TITLE);//不在活动中显示标题栏。   需要在setContentView()之前执行。 2.Int...

拓端数据tecdat|R语言分布滞后线性和非线性模型(DLMs和DLNMs)分析时间序列数据

原文链接:http://tecdat.cn/?p=20953序言 本文演示了在时间序列分析中应用分布滞后线性和非线性模型(DLMs和DLNMs)。Gasparrini等人[2010]和Gasparrini[2011]阐述了DLMs和DLNMs的发展以及时间序列数据的实现。本文描述的示例涵盖了时间序列数据DLNM方法的大多数标准应用,并探讨了DLNM包用于指...