dart:convert 库
用于在不同数据表示之间转换的编码器和解码器,包括 JSON 和 UTF-8。
除了常见的数据表示的转换器之外,此库还提供了以易于链式调用和使用流的方式实现转换器的支持。
在您的代码中使用此库
import 'dart:convert';
两个常用的转换器是顶级实例 JsonCodec 和 Utf8Codec,分别命名为 json 和 utf8。
JSON
JSON 是一种用于表示结构化对象和集合的简单文本格式。
JsonCodec 将 JSON 对象编码为字符串,将字符串解码为 JSON 对象。使用 JSON 格式,json 编码器/解码器在字符串和对象结构之间转换,例如列表和映射。
示例
var encoded = json.encode([1, 2, { "a": null }]);
var decoded = json.decode('["foo", { "bar": 499 }]');
有关更多信息,请参阅 JsonEncoder 和 JsonDecoder。
UTF-8
Utf8Codec 将字符串编码为 UTF-8 代码单元(字节),并将 UTF-8 代码单元解码为字符串。
示例
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]);
有关更多信息,请参阅 Utf8Encoder 和 Utf8Decoder。
ASCII
AsciiCodec 将字符串编码为存储为字节的 ASCII 代码,并将 ASCII 字节解码为字符串。并非所有字符都可以表示为 ASCII,因此并非所有字符串都可以成功转换。
ascii 是 AsciiCodec 的默认实现。
示例
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]);
有关更多信息,请参阅 AsciiEncoder 和 AsciiDecoder。
Latin-1
Latin1Codec 将字符串编码为 ISO Latin-1(又称 ISO-8859-1)字节,并将 Latin-1 字节解码为字符串。并非所有字符都可以表示为 Latin-1,因此并非所有字符串都可以成功转换。
latin1 是 Latin1Codec 的默认实现。
示例
var encoded = latin1.encode('blåbærgrød');
var decoded = latin1.decode([0x62, 0x6c, 0xe5, 0x62, 0xe6,
0x72, 0x67, 0x72, 0xf8, 0x64]);
有关更多信息,请参阅 Latin1Encoder 和 Latin1Decoder。
Base64
Base64Codec 使用默认的 base64 字母表编码字节,使用 base64 和 base64url 字母表解码,不允许无效字符且需要填充。
base64 是 Base64Codec 的默认实现。
示例
var encoded = base64.encode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6,
0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
var decoded = base64.decode('YmzDpWLDpnJncsO4ZAo=');
有关更多信息,请参阅 Base64Encoder 和 Base64Decoder。
转换器
转换器通常与流一起使用,以将流中的数据转换为可用时所需的数据格式。以下代码使用了两个转换器。第一个是一个UTF-8解码器,它在从文件读取数据时将其从字节转换为UTF-8格式。第二个是一个行分割器实例,它将数据按换行符边界分割。
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);
});
有关创建自己的转换器的信息,请参阅Codec和Converter类的文档。
HTML转义
HtmlEscape转换器将HTML中具有特殊意义的字符转义。该转换器查找HTML源中具有意义的字符,并用相应的HTML实体替换它们。
可以使用HtmlEscapeMode.new构造函数创建自定义转义模式。
示例
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/
类
- AsciiCodec
- AsciiCodec允许将字符串编码为ASCII字节,并将ASCII字节解码为字符串。
- AsciiDecoder
- 将ASCII字节转换为字符串。
- AsciiEncoder
- 将只包含ASCII字符的字符串转换为字节。
- Base64Codec
- base64编码器和解码器。
- Base64Decoder
- base64编码数据的解码器。
- Base64Encoder
- base64和base64url编码转换器。
- ByteConversionSink
- ByteConversionSink为转换器提供了一个高效传输字节数据的接口。
-
ChunkedConversionSink<
T> - ChunkedConversionSink用于在分块转换期间在两个转换器之间更有效地传输数据。
- ClosableStringSink
- ClosableStringSink通过添加一个
close
方法扩展了StringSink接口。 -
Codec<
S, T> - Codec编码数据(如果支持)并解码数据。
-
Converter<
S, T> - Converter将数据从一种表示形式转换为另一种表示形式。
- 编码
- 未闭合的编码集合。
- HtmlEscape
- 转义HTML中具有特殊意义的字符的转换器。
- HtmlEscapeMode
- HTML转义模式。
- JsonCodec
- JsonCodec将JSON对象编码为字符串,并将字符串解码为JSON对象。
- JsonDecoder
- 此类解析JSON字符串并构建相应的对象。
- JsonEncoder
- 此类将JSON对象转换为字符串。
- JsonUtf8Encoder
- 将单个对象编码为UTF-8编码的JSON字符串的编码器。
- Latin1Codec
- Latin1Codec将字符串编码为ISO Latin-1(也称为ISO-8859-1)字节,并将Latin-1字节解码为字符串。
- Latin1Decoder
- 此类将Latin-1字节(无符号8位整数的列表)转换为字符串。
- Latin1Encoder
- 此类将只包含ISO Latin-1字符的字符串转换为字节。
- LineSplitter
- StreamTransformer,用于将String分割成单独的行。
- StringConversionSink
- 转换器用于高效传输String数据的接收器。
- Utf8Codec
- Utf8Codec将字符串编码为UTF-8代码单元(字节),并将UTF-8代码单元解码为字符串。
- Utf8Decoder
- 此类将UTF-8代码单元(无符号8位整数的列表)转换为字符串。
- Utf8Encoder
- 此类将字符串转换为它们的UTF-8代码单元(无符号8位整数的列表)。
常量
- ascii → const AsciiCodec
- 默认AsciiCodec实现的实例。
- base64 → const Base64Codec
- base64编码器和解码器。
- base64Url → const Base64Codec
- 一个 base64url 编码和解码器。
- htmlEscape → const HtmlEscape
- 一个将字符转换为 HTML 实体的
String
转换器。 - json → const JsonCodec
- JsonCodec 的默认实现实例。
- latin1 → const Latin1Codec
- Latin1Codec 的默认实现实例。
- unicodeBomCharacterRune → const int
- Unicode 字节顺序标记 (BOM) 字符
U+FEFF
。 - unicodeReplacementCharacterRune → const int
- Unicode 替换字符
U+FFFD
(�)。 - utf8 → const Utf8Codec
- Utf8Codec 的默认实现实例。
函数
-
base64Decode(
String source) → Uint8List - 解码 base64 或 base64url 编码的字节。
-
base64Encode(
List< int> bytes) → String - 使用 base64 编码对
bytes
进行编码。 -
base64UrlEncode(
List< int> bytes) → String - 使用 base64url 编码对
bytes
进行编码。 -
jsonDecode(
String source, {Object? reviver(Object? key, Object? value)?}) → dynamic - 解析字符串并返回生成的 Json 对象。
-
jsonEncode(
Object? object, {Object? toEncodable(Object? nonEncodable)?}) → String - 将
object
转换为 JSON 字符串。
类型定义
- ByteConversionSinkBase = ByteConversionSink
- 此类为需要接受字节输入的转换器提供了一个基类。
- StringConversionSinkBase = StringConversionSink
- 此类为需要接受字符串输入的转换器提供了一个基类。
- StringConversionSinkMixin = StringConversionSink
- 此类为需要接受字符串输入的转换器提供了一个混入类。
异常 / 错误
- JsonCyclicError
- 由于循环引用,报告无法将对象转换为字符串。
- JsonUnsupportedObjectError
- 当对象无法序列化时,JSON序列化抛出的错误。