自主开发原生HTTP请求查询要素得到乱码问题解决

例如使用Java语言发送请求,增删改查要素图层,得到了返回值解析出来是乱码。
�       �ۻn1��wQ�B3�ڋ� m���c�	$��*�gY�@���z).�p��ϐ�sx�\�^o��������xx�ܯ������������������z������ǧ��<oj��؂oY�m1��G��ڿi���S���}d!�ֵ����G疶����s�"�\��"{��0=�>�����3�>ɲ��_W��	X��Ջ_���K[}^T�|��M�j�v�[LX1{�^��nBNbMs�}l�>g��-�����}lsی������>���j���~�� P��+�`����_�v�]z� (@ ��#�~�ء��`w�:6F�k��Ĵ�sn�h������$�D;�ƩO�8iU�N�܍*mT*�C-�If!�2H:B��)O& (H9 �#����@� o�sD����o��P� Ә��@� ��5&ςT�s|I �8CA 
很多时候就会一头雾水。
已邀请:

许丹石

赞同来自:

实际上有可能是gzip导致。首先排查发送请求时的request header是否带了Accept-Encoding : gzip,deflate 。 如果带了,那么得到的response header里也会有gzip的信息。这时,应解析gzip,将binary data数据转为String。
// 判断headers里是否包含content-encoding=gzip
Collection<String> encodingStrings = (Collection)response.headers().get("content-encoding");
if (null != encodingStrings && encodingStrings.contains("gzip")) {
// 使用IOUtils,将binary data数据流转为String
jsons = IOUtils.toString(new GZIPInputStream(response.body().asInputStream()), "utf-8");
log.info("result:{}", jsons);
}
当然另一种解决方法就是该请求不走gzip压缩。将request header中的Accept-Encoding : gzip,deflate 去掉。解析时还是当成普通的字符串或json去解析即可。无需解压缩。
//注释了这句话 
//httpConn.setRequestProperty("Accept-Encoding","gizp, deflate, br");

要回复问题请先登录注册