- 导入
import 'dart:convert';
import 'dart:typed_data'; // Uint8List需要导入这个
- Ascii
// 创建一个 AsciiCodec 对象
AsciiCodec ac=new AsciiCodec();
// 编码 将ascii字符串转换成UintList类型 无法编码中文 会报错
Uint8List list=ac.encode("Hello Dart");
// 等价于
// Uint8List list=AsciiEncoder().convert("Hello Dart");
print(list); // [72, 101, 108, 108, 111, 32, 68, 97, 114, 116]
// 解码 将UintList转换成ascii字符串
String str=ac.decode(list);
// 等价于
// String str=AsciiDecoder().convert(list);
print(str); // Hello Dart
// 解码流 即将Stram<List<int>>类型转换成ascii字符串
ac.decodeStream(Stream.value(list)).then((value)=>print(value)); // Hello Dart
// 编解码器的名称
print(ac.name); // us-ascii
- Base64
AsciiCodec ac=new AsciiCodec();
Uint8List list=await ac.encode("Hello Dart");
print(list); // [72, 101, 108, 108, 111, 32, 68, 97, 114, 116]
// Base64Codec允许base64将字节编码为ASCII字符串,并将有效编码解码回字节,始终是4的倍数。
Base64Codec bc=new Base64Codec();
// 编码
String str=bc.encode(list);
// 等价于
// String str=new Base64Encoder().convert(list);
print(str); // SGVsbG8gRGFydA==
// 解码
Uint8List list2=bc.decode(str);
// 等价于
// Uint8List list2=new Base64Decoder().convert(str);
print(list2); // [72, 101, 108, 108, 111, 32, 68, 97, 114, 116]
// 验证并标准化source的base64编码数据 是base64则照常输出 不是则进行填充或报错
// 看是否是4的倍数 如果多一个字符 则报错 多两个及以上 则填充
print(bc.normalize(str));
- JSON
JsonCodec jc=new JsonCodec();
// JS中的对象就是这里的Map
print({}.runtimeType);
// 将Map转换成JSON
Object person=jc.encode({'name':"zs"});
// 等价于
// Object person=new JsonEncoder().convert({'name':"zs"});
print(person);
// 将JSON转换成Map
Map<String,dynamic> str=jc.decode(person);
// 等价于
// Map<String,dynamic> str=new JsonDecoder().convert(person);
print(str);
// 将对象或JSON字符串 转换成一个UTF-8数组(Uint8List)
Uint8List person2=new JsonUtf8Encoder().convert({'name':'zs'});
print(person2);
- UTF8
Utf8Codec utf=new Utf8Codec();
// 将字符串编码为Uint8List
Uint8List list=utf.encode("Hello Dart");
// 等价于
// Uint8List list=new Utf8Encoder().convert("Hello Dart");
print(list);
// 将Uint8List解码为字符串
String str=utf.decode(list);
// 等价于
// String str=new Utf8Decoder().convert(list);
print(str);
// 将流解码
utf.decodeStream(Stream.value(list)).then((value) => print(value));
print(utf.name);
}
- Latin1
// Latin1编码是单字节编码(无法编码中文),向下兼容ASCII
Latin1Codec lc=new Latin1Codec();
Uint8List list=lc.encode("Hello Dart");
// Uint8List list2=lc.encode("你好 Dart"); //报错
print(list);
String str=lc.decode(list);
print(str);