Flutter中編解碼Convert基本使用

1. 導入

import 'dart:convert';     
import 'dart:typed_data';  // Uint8List需要導入這個

2. 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

3. 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));

4. 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);

5. 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);
}

6. 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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章