-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
convert.dart
181 lines (178 loc) · 6.25 KB
/
convert.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Encoders and decoders for converting between different data representations,
/// including JSON and UTF-8.
///
/// In addition to converters for common data representations, this library
/// provides support for implementing converters in a way which makes them easy
/// to chain and to use with streams.
///
/// To use this library in your code:
/// ```dart
/// import 'dart:convert';
/// ```
/// Two commonly used converters are the top-level instances of
/// [JsonCodec] and [Utf8Codec], named [json] and [utf8], respectively.
///
/// ## JSON
/// JSON is a simple text format for representing structured objects and
/// collections.
///
/// A [JsonCodec] encodes JSON objects to strings and decodes strings to
/// JSON objects. The [json] encoder/decoder transforms between strings and
/// object structures, such as lists and maps, using the JSON format.
///
/// The [json] is the default implementation of [JsonCodec].
///
/// Examples
/// ```dart
/// var encoded = json.encode([1, 2, { "a": null }]);
/// var decoded = json.decode('["foo", { "bar": 499 }]');
/// ```
/// For more information, see also [JsonEncoder] and [JsonDecoder].
///
/// ## UTF-8
/// A [Utf8Codec] encodes strings to UTF-8 code units (bytes) and decodes
/// UTF-8 code units to strings.
///
/// The [utf8] is the default implementation of [Utf8Codec].
///
/// Example:
/// ```dart
/// var encoded = utf8.encode('Îñţérñåţîöñåļîžåţîờñ');
/// var decoded = utf8.decode([
/// 195, 142, 195, 177, 197, 163, 195, 169, 114, 195, 177, 195, 165, 197,
/// 163, 195, 174, 195, 182, 195, 177, 195, 165, 196, 188, 195, 174, 197,
/// 190, 195, 165, 197, 163, 195, 174, 225, 187, 157, 195, 177]);
/// ```
/// For more information, see also [Utf8Encoder] and [Utf8Decoder].
///
/// ## ASCII
/// An [AsciiCodec] encodes strings as ASCII codes stored as bytes and decodes
/// ASCII bytes to strings. Not all characters can be represented as ASCII, so
/// not all strings can be successfully converted.
///
/// The [ascii] is the default implementation of [AsciiCodec].
///
/// Example:
/// ```dart
/// var encoded = ascii.encode('This is ASCII!');
/// var decoded = ascii.decode([0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73,
/// 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x21]);
/// ```
/// For more information, see also [AsciiEncoder] and [AsciiDecoder].
///
/// ## Latin-1
/// A [Latin1Codec] encodes strings to ISO Latin-1 (aka ISO-8859-1) bytes
/// and decodes Latin-1 bytes to strings. Not all characters can be represented
/// as Latin-1, so not all strings can be successfully converted.
///
/// The [latin1] is the default implementation of [Latin1Codec].
///
/// Example:
/// ```dart
/// var encoded = latin1.encode('blåbærgrød');
/// var decoded = latin1.decode([0x62, 0x6c, 0xe5, 0x62, 0xe6,
/// 0x72, 0x67, 0x72, 0xf8, 0x64]);
/// ```
/// For more information, see also [Latin1Encoder] and [Latin1Decoder].
///
/// ## Base64
/// A [Base64Codec] encodes bytes using the default base64 alphabet,
/// decodes using both the base64 and base64url alphabets,
/// does not allow invalid characters and requires padding.
///
/// The [base64] is the default implementation of [Base64Codec].
///
/// Example:
/// ```dart
/// var encoded = base64.encode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6,
/// 0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
/// var decoded = base64.decode('YmzDpWLDpnJncsO4ZAo=');
/// ```
/// For more information, see also [Base64Encoder] and [Base64Decoder].
///
/// ## Converters
/// Converters are often used with streams
/// to transform the data that comes through the stream
/// as it becomes available.
/// The following code uses two converters.
/// The first is a UTF-8 decoder, which converts the data from bytes to UTF-8
/// as it is read from a file,
/// The second is an instance of [LineSplitter],
/// which splits the data on newline boundaries.
/// ```dart import:io
/// const showLineNumbers = true;
/// var lineNumber = 1;
/// var stream = File('quotes.txt').openRead();
///
/// stream.transform(utf8.decoder)
/// .transform(const LineSplitter())
/// .forEach((line) {
/// if (showLineNumbers) {
/// stdout.write('${lineNumber++} ');
/// }
/// stdout.writeln(line);
/// });
/// ```
/// See the documentation for the [Codec] and [Converter] classes
/// for information about creating your own converters.
///
/// ## HTML Escape
/// [HtmlEscape] converter escapes characters with special meaning in HTML.
/// The converter finds characters that are significant in HTML source and
/// replaces them with corresponding HTML entities.
///
/// Custom escape modes can be created using the [HtmlEscapeMode.new]
/// constructor.
///
/// Example:
/// ```dart
/// const htmlEscapeMode = HtmlEscapeMode(
/// name: 'custom',
/// escapeLtGt: true,
/// escapeQuot: false,
/// escapeApos: false,
/// escapeSlash: false,
/// );
///
/// const HtmlEscape htmlEscape = HtmlEscape(htmlEscapeMode);
/// String unescaped = 'Text & subject';
/// String escaped = htmlEscape.convert(unescaped);
/// print(escaped); // Text & subject
///
/// unescaped = '10 > 1 and 1 < 10';
/// escaped = htmlEscape.convert(unescaped);
/// print(escaped); // 10 > 1 and 1 < 10
///
/// unescaped = "Single-quoted: 'text'";
/// escaped = htmlEscape.convert(unescaped);
/// print(escaped); // Single-quoted: 'text'
///
/// unescaped = 'Double-quoted: "text"';
/// escaped = htmlEscape.convert(unescaped);
/// print(escaped); // Double-quoted: "text"
///
/// unescaped = 'Path: /system/';
/// escaped = htmlEscape.convert(unescaped);
/// print(escaped); // Path: /system/
/// ```
/// {@category Core}
library dart.convert;
import 'dart:async';
import 'dart:typed_data';
import 'dart:_internal' show CastConverter, checkNotNullable, parseHexByte;
part 'ascii.dart';
part 'base64.dart';
part 'byte_conversion.dart';
part 'chunked_conversion.dart';
part 'codec.dart';
part 'converter.dart';
part 'encoding.dart';
part 'html_escape.dart';
part 'json.dart';
part 'latin1.dart';
part 'line_splitter.dart';
part 'string_conversion.dart';
part 'utf.dart';