Browse Source

Introduce "output encoding", per spec.

Simon Sapin 10 years ago
parent
commit
837a8da8f9
3 changed files with 16 additions and 2 deletions
  1. 14 0
      src/encoding.rs
  2. 1 1
      src/form_urlencoded.rs
  3. 1 1
      src/lib.rs

+ 14 - 0
src/encoding.rs

@@ -51,6 +51,16 @@ impl EncodingOverride {
         .map(EncodingOverride::from_encoding)
     }
 
+    /// https://encoding.spec.whatwg.org/#get-an-output-encoding
+    pub fn to_output_encoding(self) -> Self {
+        if let Some(encoding) = self.encoding {
+            if matches!(encoding.name(), "utf-16le" | "utf-16be") {
+                return Self::utf8()
+            }
+        }
+        self
+    }
+
     pub fn is_utf8(&self) -> bool {
         self.encoding.is_none()
     }
@@ -87,6 +97,10 @@ impl EncodingOverride {
         None
     }
 
+    pub fn to_output_encoding(self) -> Self {
+        self
+    }
+
     pub fn is_utf8(&self) -> bool {
         true
     }

+ 1 - 1
src/form_urlencoded.rs

@@ -167,7 +167,7 @@ pub fn serialize_with_encoding<I, K, V>(pairs: I,
                                         encoding_override: Option<::encoding::EncodingRef>)
                                         -> String
 where I: IntoIterator, I::Item: Borrow<(K, V)>, K: AsRef<str>, V: AsRef<str> {
-    serialize_internal(pairs, EncodingOverride::from_opt_encoding(encoding_override))
+    serialize_internal(pairs, EncodingOverride::from_opt_encoding(encoding_override).to_output_encoding())
 }
 
 fn serialize_internal<I, K, V>(pairs: I, encoding_override: EncodingOverride) -> String

+ 1 - 1
src/lib.rs

@@ -200,7 +200,7 @@ impl<'a> ParseOptions<'a> {
     /// This is a legacy concept only relevant for HTML.
     #[cfg(feature = "query_encoding")]
     pub fn encoding_override(mut self, new: Option<encoding::EncodingRef>) -> Self {
-        self.encoding_override = EncodingOverride::from_opt_encoding(new);
+        self.encoding_override = EncodingOverride::from_opt_encoding(new).to_output_encoding();
         self
     }