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,第二个是 LineSplitter 的一个实例,它将数据在换行边界处分割。
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
- A base64 编码器和解码器。
- Base64Decoder
- base64 编码数据的解码器。
- Base64Encoder
- Base64 和 base64url 编码转换器。
- ByteConversionSink
- ByteConversionSink 为转换器提供了一个高效传输字节数据的接口。
-
ChunkedConversionSink<
T> - 在分块转换期间,ChunkedConversionSink 用于在两个转换器之间更有效地传输数据。
- ClosableStringSink
- ClosableStringSink 通过添加一个
close
方法扩展了 StringSink 接口。 -
Codec<
S, T> - Codec 编码(如果受支持)并解码数据。
-
Converter<
S, T> - Converter 将数据从一种表示转换为另一种表示。
- 编码
- 开放式的编码集。
- HtmlEscape
- 将具有特殊意义的字符转义的转换器。
- 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,用于将字符串拆分为单独的行。
- StringConversionSink
- 用于转换器高效传输字符串数据的接收器。
- Utf8Codec
- Utf8Codec 将字符串编码为 UTF-8 代码单元(字节),并将 UTF-8 代码单元解码为字符串。
- Utf8Decoder
- 这个类将 UTF-8 代码单元(无符号 8 位整数的列表)转换为字符串。
- Utf8Encoder
- 这个类将字符串转换为它们的 UTF-8 代码单元(无符号 8 位整数列表)。
常量
- ascii → const AsciiCodec
- 默认 AsciiCodec 实现的实例。
- base64 → const Base64Codec
- A base64 编码器和解码器。
- base64Url → const Base64Codec
- A 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编码对字节进行编码。
-
base64UrlEncode(
List< int> bytes) → String - 使用base64url编码对字节进行编码。
-
jsonDecode(
String source, {Object? reviver(Object? key, Object? value)?}) → dynamic - 解析字符串并返回生成的Json对象。
-
jsonEncode(
Object? object, {Object? toEncodable(Object? nonEncodable)?}) → String - 将对象转换为JSON字符串。
类型别名
- ByteConversionSinkBase = ByteConversionSink
- 此类为需要接受字节输入的转换器提供了一个基类。
- StringConversionSinkBase = StringConversionSink
- 此类为需要接受字符串输入的转换器提供了一个基类。
- StringConversionSinkMixin = StringConversionSink
- 此类为需要接受字符串输入的转换器提供一个混入类。
异常 / 错误
- JsonCyclicError
- 报告由于循环引用,对象无法被转换为字符串。
- JsonUnsupportedObjectError
- 当对象无法序列化时,JSON序列化抛出的错误。