如何在Dart中对uuencode编码字符串执行uudecode解码操作?
等待Future<Map<String, T>>完成后加载资源非常简单,而将文件直接嵌入程序代码则更加便捷。
import 'dart:convert' as JSON; void main() { var jsonStr = """{ "en": "Greetings, World!", "cn": "你好,世界!" }"""; final json = JSON.jsonDecode(jsonStr); print(json.length); }
但若将上述JSON字符串压缩后执行uuencode file.json.gz file.json.gz编码,会得到如下内容:
begin 644 file.json.gz M'XL("#1&\F```V9I;&4N:G-O;@"K5E!*S5.R4E!R+TI-+<G,2R_640C/+\I) G453245!*!DL]V;O@Z=*][_?T/-DQ[?G4'D4EA5HN`+"N/9PX```` ` end
再将编码结果嵌入代码中:
import 'dart:convert' as JSON; void main() { var str = """ M'XL("#1&\F```V9I;&4N:G-O;@"K5E!*S5.R4E!R+TI-+<G,2R_640C/+\I) G453245!*!DL]V;O@Z=*][_?T/-DQ[?G4'D4EA5HN`+"N/9PX```` `"""; ... }
如何在Dart中对该uuencode编码的字符串执行uudecode解码?
方案1:自行实现uuencode解码
uuencode编码规则简单,你可以按照逻辑手动实现解码:
- 先移除编码内容的头部
begin 644 file.json.gz、尾部end和空行标记 - 逐行处理内容:每行第一个字符为长度标记,后续每4个字符按uuencode映射规则(ASCII码32-95的字符减32得到6位值,拼接后拆分8位字节)转换为原始字节
- 转换得到的字节是gzip压缩内容,再用
dart:io的GZipCodec解压即可得到原始JSON
方案2:升级为base64方案(更推荐)
base64是Dart原生支持的编码格式,更适合嵌入式场景。你可以为uuencode添加-m参数直接生成base64编码内容:
> uuencode -m file.json.gz file.json.gz begin-base64 644 file.json.gz H4sICH6y8mAAA2ZpbGUuanNvbgCrVlBKzVOyUlByL0pNLcnMSy/WUQjPL8pJUVTSUVBKBks92bvg 6dK97/f0PNkx7fnUHkUlhVouALCuPZw4AAAA ====
这种情况下可以直接使用dart:convert库提供的base64Decode方法完成解码,完整实现如下:
import 'dart:convert'; import 'dart:io'; void main() { var str = """begin-base64 644 file.json.gz H4sICH6y8mAAA2ZpbGUuanNvbgCrVlBKzVOyUlByL0pNLcnMSy/WUQjPL8pJUVTSUVBKBks92bvg 6dK97/f0PNkx7fnUHkUlhVouALCuPZw4AAAA ===="""; // 提取base64有效内容:移除头部、尾部====标记和多余换行 final lines = str.split('\n'); final base64Content = lines.sublist(1, lines.length - 1).join(''); // 解码base64得到gzip压缩字节 final compressedBytes = base64Decode(base64Content); // 解压gzip得到原始JSON字节 final jsonBytes = GZipCodec().decode(compressedBytes); // 转换为JSON对象 final json = jsonDecode(utf8.decode(jsonBytes)); print(json); // 输出:{en: Greetings, World!, cn: 你好,世界!} }
内容的提问来源于stack exchange,提问作者Sam7919
相关产品推荐
相关产品推荐

