HttpClient字符编码

来源:互联网 发布:实用的科技网站知乎 编辑:程序博客网 时间:2024/05/21 05:06

HttpClient Character Encodings

 

简介

 

这篇文章主要是用来概述怎样使用HttpClient去处理字符编码以及怎样通过安全的编码方式使用HttpClient。主要包括三个部分:HTTP HeadersRequest/Response BodyURLs

 

HTTP Headers

 

Requst或者是Response的头部信息必须使用US-ASCII去格式化并且不能使用非US-ASCII字符。一般这不是什么问题,因为HTTP Headers是用来定义传送数据的,并不是传输信息内容的本身。

 

但有一个例外是cookies。一但cookiesHTTP Headers来传输的话,必须得保证其编码格式为US-ASII。关于这一点可以参考Cookies指南。

 

Request/Response Body

 

Request/Resposne body 可以用任何编码方式,默认是ISO-8859-1。编码可以在HeadersContent-Type里定义。例如:

Content-Typetext/htmlcharset=UTF-8

在上面这个例子中应用程序必须使用UTF-8编码方法将body中的内容转换为String。可以使用addRequestHeader方法来设置body中的content-type,而getResponseCharSet可以得到body中的content-type

 

如果返回的结果预知是String的话,你可以使用getResponseBodyAsString方法取得,而此方法会自动按照Content-Type头信息中的编码格式解码,若Content-Type没有指定则按照ISO-8859-1来解码。

 

URLs

 

URLs标准(RFC1738)规定URLs只能包含US-ASCII编码的图形打印字符并且一个字符是八位。其中十六进制的FF不能在US-ASCII中使用以及1F代表控制字符;若是以上俩个进制位的字符必须被编码。

 

所有不能用8-bit ASCII编码的字符,因为不能被可靠的编码而不能在URL中使用。尽管如此,有些服务器仍然支持各种不同编码格式的双字节字符在URLs中使用,最通用的一种技术就是将这些双字节字符用UTF-8编码,将每一个双字节字符拆分成俩个单字节分别编码。尽管如此,没有按照标准来定义并且非常容易出错,所以建议URLs使用8-bit ASCII范围内的字符。

原创粉丝点击