关于Http请求后返回json乱码的问题

其实很多时候我们在做http请求数据返回的时候经常会莫名发现会出现乱码,大部分时候我们都觉得是编码不对造成的。

一般情况下正常我们默认都是作个很简单的操作,直接使用UTF-8编码基本问题就搞定了

HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(strURL);
request.Method = "GET";
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
Stream s;
s = response.GetResponseStream();
string StrDate = "";
string strValue = "";

StreamReader Reader = new StreamReader(s, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
  strValue += StrDate + "\r\n";
}

基本问题就OK了,但有时候却并不一定,比如如果事实上编码并不是这样呢?
我们就需要去判断当前正确编码方式,来确定

根据当前返回的类型正确的编码方式来读对应的流即可解决问题。

But 有时候却并不一定是编码造成的。。。

比如:如果使用了压缩呢???

假如在Header头中有压缩呢? 比如:我们使用了gzip

这时候就变了,我们不能再使用普通的

这种方式了,而是应该使用Gzip的流的方式

当然还有别的Header的设置,比如transEncoding等等,所以我们做这种数据请求的时候出现乱码不用慌,细心去分析Header头中返回的信息,根据Header中的相关设置作相关处理。

顺便说下本次其实也是在做一个天气预报的实验中发现了该乱码现象,

默认在浏览器中我们看到

在多种浏览器中返回均是乱码,用IE11打开也是,但右键更改编码为UTF-8后正常

But我们程序更改为UTF-8依然不行啊。。。

当我们采用默认请求方式时,使用UTF-8

结果为:

悲催啊。。。

加断点,查看Response中相关信息,我们看到对应的Header中内容编码方式为gzip方式。。。

直接修改这部分流的读取方式如下:

返回结果为:

结果正常了。。。所以面对这种乱码问题应该细心去查请求和响应头和内容中的各种信息。

以此小经验作个小记录

时间: 2024-12-16 03:27:08

关于Http请求后返回json乱码的问题的相关文章

SpringMVC Ajax请求时返回json中文字符串的乱码问题的解决方案

1.org.springframework.http.converter.StringHttpMessageConverter类是处理请求或相应字符串的类,并且默认字符集为ISO-8859-1,所以在当返回json中有中文时会出现乱码. 2.StringHttpMessageConverter的父类里有个List<MediaType> supportedMediaTypes属性,用来存放StringHttpMessageConverter支持需特殊处理的MediaType类型,如果需处理的Me

Spring MVC全局异常后返回JSON异常数据

Spring MVC全局异常后返回JSON异常数据 问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内容,如果是404请求不到资源或者500这类服务器的问题,可能会导致返回404和500异常页面,手机端的处理就非常麻烦,为了解决这个问题,就需要做全局的异常处理. 解决方案: (1)自定义或者使用spring自带的各种异常处理器 例如spring基于

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>

SpringMVC获取链接携带的参数,返回JSON乱码的问题

一.SpringMVC获取链接携带的参数:经常看到有的链接是xxxx/1.html,通过SpringMVC也可以达到这种获取,来动态的获取链接携带的参数,使用@PathVariable即可,如: @RequestMapping("/user_to_update_page/{id}.html") public ModelAndView toUpdate(@PathVariable("id") Integer id) throws Exception { ModelAn

使用getJSON()异步请求服务器返回json格式数据

我们可以使用jquery的getJSON()方法请求服务器返回json格式数据: js代码: function test(){ $.getJSON("JsonServlet",function(result){ alert(result.name); }); } 服务器端servlet响应: @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletEx

Ajax请求ashx 返回 json 格式数据常见问题

问题:ashx 返回的字符串json格式,在前台ajax自动解析失败. 问题分析:经过排查,发现是拼接json时出现” ’  “单引号,jquery无法解析,用” “ “双引号才可以.例如: string strjson="[ { 'userName':'test'}]"; //单引号导致jquery无法自动解析. string strjson="[ {\"userName\":\"test\"}]"; // 双引号可以解析:

通过jquery的ajax异步请求接收返回json数据

jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发送设置的datatype设置为jsonp格式数据或json格式都可以. 代码示例如下: $('#send').click(function () { $.ajax({ type : "GET", url : "a.php", dataType : "jsonp", success : function (data) { $.

Mock服务端:客户端Get请求,返回json数据两种方式

Mock服务端:客户端Get请求,返回json数据两种方式:1,直接在response中返回json数据 2,通过json文件返回: 准备工作: wiremock-body-transformer-1.1.6.jar wiremock-standalone-2.14.0.jar 安装java运行环境(jdk等) 一,直接在response中返回: 说明: mappings : 对应请求request位置 __files : 对应响应reponse位置 mappings中增减文件:get.json

使用ajax请求SpringMVC返回Json出现乱码解决方法

1:在使用ajax请求后台访问数据的数据,后台返回的数据是乱码,带??问号的乱码,之前还一直没有遇到过,在这里记录整理一下,贴出解决代码! (1):前台使用ajax ,已经设定返回的结果为json格式!ajax代码不贴出来了! (2):后台代码 @RequestMapping(value = { "/hello/{uuid}" }, method = RequestMethod.GET /*,produces = "text/html;charset=UTF-8"*