Allow user to specify a default encoding when reading Response to text (#511)
Add a function `text_with_charset` which allows the user to provide a default charset encoding. The behavior of this still prefers the provided charset inside the http header over the provided default encoding.
This commit is contained in:
		| @@ -250,6 +250,33 @@ impl Response { | |||||||
|     /// This consumes the body. Trying to read more, or use of `response.json()` |     /// This consumes the body. Trying to read more, or use of `response.json()` | ||||||
|     /// will return empty values. |     /// will return empty values. | ||||||
|     pub fn text(&mut self) -> ::Result<String> { |     pub fn text(&mut self) -> ::Result<String> { | ||||||
|  |         self.text_with_charset("utf-8") | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Get the response text given a specific encoding. | ||||||
|  |     /// | ||||||
|  |     /// This method decodes the response body with BOM sniffing | ||||||
|  |     /// and with malformed sequences replaced with the REPLACEMENT CHARACTER. | ||||||
|  |     /// You can provide a default encoding for decoding the raw message, while the | ||||||
|  |     /// `charset` parameter of `Content-Type` header is still prioritized. For more information | ||||||
|  |     /// about the possible encoding name, please go to | ||||||
|  |     /// https://docs.rs/encoding_rs/0.8.17/encoding_rs/#relationship-with-windows-code-pages | ||||||
|  |     /// | ||||||
|  |     /// # Example | ||||||
|  |     /// | ||||||
|  |     /// ```rust | ||||||
|  |     /// # extern crate reqwest; | ||||||
|  |     /// # fn run() -> Result<(), Box<::std::error::Error>> { | ||||||
|  |     /// let content = reqwest::get("http://httpbin.org/range/26")?.text_with_charset("utf-8")?; | ||||||
|  |     /// # Ok(()) | ||||||
|  |     /// # } | ||||||
|  |     /// ``` | ||||||
|  |     /// | ||||||
|  |     /// # Note | ||||||
|  |     /// | ||||||
|  |     /// This consumes the body. Trying to read more, or use of `response.json()` | ||||||
|  |     /// will return empty values. | ||||||
|  |     pub fn text_with_charset(&mut self, default_encoding: &str) -> ::Result<String> { | ||||||
|         let len = self.content_length.unwrap_or(0); |         let len = self.content_length.unwrap_or(0); | ||||||
|         let mut content = Vec::with_capacity(len as usize); |         let mut content = Vec::with_capacity(len as usize); | ||||||
|         self.read_to_end(&mut content).map_err(::error::from)?; |         self.read_to_end(&mut content).map_err(::error::from)?; | ||||||
| @@ -267,7 +294,7 @@ impl Response { | |||||||
|                     .get_param("charset") |                     .get_param("charset") | ||||||
|                     .map(|charset| charset.as_str()) |                     .map(|charset| charset.as_str()) | ||||||
|             }) |             }) | ||||||
|             .unwrap_or("utf-8"); |             .unwrap_or(default_encoding); | ||||||
|         let encoding = Encoding::for_label(encoding_name.as_bytes()).unwrap_or(UTF_8); |         let encoding = Encoding::for_label(encoding_name.as_bytes()).unwrap_or(UTF_8); | ||||||
|         // a block because of borrow checker |         // a block because of borrow checker | ||||||
|         { |         { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user