buder

20170906工作日记--volley源码的相关方法细节学习

1. 在StringRequest类中的75行--new String();使用方法

 1  /**
 2      * 工作线程将会调用这个方法
 3      * @param response Response from the network
 4      * @return
 5      */
 6     @Override
 7     protected Response<String> parseNetworkResponse(NetworkResponse response) {
 8         String parsed;
 9         try {
10             parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
11         } catch (UnsupportedEncodingException e) {//如果指定字符集不受支持
12             parsed = new String(response.data);
13         }
14         return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
15     }

关于HttpHeaderParser.parseCharaset()方法:

 1     /**
 2      * Retrieve a charset from headers
 3      *
 4      * @param headers An {@link java.util.Map} of headers
 5      * @param defaultCharset Charset to return if none can be found
 6      * @return Returns the charset specified in the Content-Type of this header,
 7      * or the defaultCharset if none can be found.
 8      */
 9     public static String parseCharset(Map<String, String> headers, String defaultCharset) {
10         String contentType = headers.get(HTTP.CONTENT_TYPE);
11         if (contentType != null) {
12             String[] params = contentType.split(";");
13             for (int i = 1; i < params.length; i++) {
14                 String[] pair = params[i].trim().split("=");
15                 if (pair.length == 2) {
16                     if (pair[0].equals("charset")) {
17                         return pair[1];
18                     }
19                 }
20             }
21         }
22 
23         return defaultCharset;
24     }
25 
26     /**从请求消息头中获取编码字符集,并且返回
27      * Returns the charset specified in the Content-Type of this header,
28      * or the HTTP default (ISO-8859-1) if none can be found.
29      */
30     public static String parseCharset(Map<String, String> headers) {
31         return parseCharset(headers, HTTP.DEFAULT_CONTENT_CHARSET);
32     }

 

(1)需要了解到HTTP协议中HTTP.CONTENT_TYPE参数以及HTTP协议的消息头信息:

 

 

可以看到Content-type的消息格式为application/json;chaset=UTF-8 的格式 

(2)new String(byte[],"UTF-8")是新建了一个UTF-8编码的字符串

字符串内容不变,只是依照后面的字符集创建新的字符串,其中解决中文乱码问题可以使用GBK字符编码。

同时它将抛出:UnsupportedEncodingException - 如果指定字符集不受支持

 

posted on 2017-09-06 09:54  buder  阅读(136)  评论(0编辑  收藏  举报

导航