Index: sdk/lib/codec/encoding.dart |
diff --git a/sdk/lib/codec/encoding.dart b/sdk/lib/codec/encoding.dart |
index 50b724be6d398d50ead3e91740080f43c604f47c..40e0f2b4d83ae56b3d58b217c06016e1a13485ad 100644 |
--- a/sdk/lib/codec/encoding.dart |
+++ b/sdk/lib/codec/encoding.dart |
@@ -20,11 +20,41 @@ const UTF8 = const Utf8Codec(); |
* A [Utf8Codec] encodes strings to utf-8 code units (bytes) and decodes |
* UTF-8 code units to strings. |
*/ |
-// TODO(floitsch): Needs a way to specify if decoding should throw or use |
-// the replacement character. |
class Utf8Codec extends Encoding { |
- const Utf8Codec(); |
+ final bool _allowMalformed; |
+ |
+ /** |
+ * Instantiates a new [Utf8Codec]. |
+ * |
+ * The optional [allowMalformed] argument defines how [decoder] (and [decode]) |
+ * deal with invalid or unterminated character sequences. |
+ * |
+ * If it is `true` (and not overriden at the method invocation) [decode] and |
+ * the [decoder] replace invalid (or unterminated) octet |
+ * sequences with the Unicode Replacement character `U+FFFD` (�). Otherwise |
+ * they throw a [FormatException]. |
+ */ |
+ const Utf8Codec({ bool allowMalformed: false }) |
+ : _allowMalformed = allowMalformed; |
+ |
+ /** |
+ * Decodes the UTF-8 [codeUnits] (a list of unsigned 8-bit integers) to the |
+ * corresponding string. |
+ * |
+ * If [allowMalformed] is `true` the decoder replaces invalid (or |
+ * unterminated) character sequences with the Unicode Replacement character |
+ * `U+FFFD` (�). Otherwise it throws a [FormatException]. |
+ * |
+ * If [allowMalformed] is not given, it defaults to the `allowMalformed` that |
+ * was used to instantiate `this`. |
+ */ |
+ String decode(List<int> codeUnits, { bool allowMalformed }) { |
+ if (allowMalformed == null) allowMalformed = _allowMalformed; |
+ return new Utf8Decoder(allowMalformed: allowMalformed).convert(codeUnits); |
+ } |
Converter<String, List<int>> get encoder => new Utf8Encoder(); |
- Converter<List<int>, String> get decoder => new Utf8Decoder(); |
+ Converter<List<int>, String> get decoder { |
+ return new Utf8Decoder(allowMalformed: _allowMalformed); |
+ } |
} |