dart:convert

用于在不同数据表示之间转换的编码器和解码器,包括 JSON 和 UTF-8。

除了常见的数据表示的转换器之外,此库还提供了以易于链式调用和使用流的方式实现转换器的支持。

在您的代码中使用此库

import 'dart:convert';

两个常用的转换器是顶级实例 JsonCodecUtf8Codec,分别命名为 jsonutf8

JSON

JSON 是一种用于表示结构化对象和集合的简单文本格式。

JsonCodec 将 JSON 对象编码为字符串,将字符串解码为 JSON 对象。使用 JSON 格式,json 编码器/解码器在字符串和对象结构之间转换,例如列表和映射。

jsonJsonCodec 的默认实现。

示例

var encoded = json.encode([1, 2, { "a": null }]);
var decoded = json.decode('["foo", { "bar": 499 }]');

有关更多信息,请参阅 JsonEncoderJsonDecoder

UTF-8

Utf8Codec 将字符串编码为 UTF-8 代码单元(字节),并将 UTF-8 代码单元解码为字符串。

utf8Utf8Codec 的默认实现。

示例

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]);

有关更多信息,请参阅 Utf8EncoderUtf8Decoder

ASCII

AsciiCodec 将字符串编码为存储为字节的 ASCII 代码,并将 ASCII 字节解码为字符串。并非所有字符都可以表示为 ASCII,因此并非所有字符串都可以成功转换。

asciiAsciiCodec 的默认实现。

示例

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]);

有关更多信息,请参阅 AsciiEncoderAsciiDecoder

Latin-1

Latin1Codec 将字符串编码为 ISO Latin-1(又称 ISO-8859-1)字节,并将 Latin-1 字节解码为字符串。并非所有字符都可以表示为 Latin-1,因此并非所有字符串都可以成功转换。

latin1Latin1Codec 的默认实现。

示例

var encoded = latin1.encode('blåbærgrød');
var decoded = latin1.decode([0x62, 0x6c, 0xe5, 0x62, 0xe6,
                             0x72, 0x67, 0x72, 0xf8, 0x64]);

有关更多信息,请参阅 Latin1EncoderLatin1Decoder

Base64

Base64Codec 使用默认的 base64 字母表编码字节,使用 base64 和 base64url 字母表解码,不允许无效字符且需要填充。

base64Base64Codec 的默认实现。

示例

var encoded = base64.encode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6,
                             0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
var decoded = base64.decode('YmzDpWLDpnJncsO4ZAo=');

有关更多信息,请参阅 Base64EncoderBase64Decoder

转换器

转换器通常与流一起使用,以将流中的数据转换为可用时所需的数据格式。以下代码使用了两个转换器。第一个是一个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);
      });

有关创建自己的转换器的信息,请参阅CodecConverter类的文档。

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 &gt; 1 and 1 &lt; 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
解码 base64base64url 编码的字节。
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序列化抛出的错误。