You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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编码规则简单,你可以按照逻辑手动实现解码:

  1. 先移除编码内容的头部begin 644 file.json.gz、尾部end和空行标记
  2. 逐行处理内容:每行第一个字符为长度标记,后续每4个字符按uuencode映射规则(ASCII码32-95的字符减32得到6位值,拼接后拆分8位字节)转换为原始字节
  3. 转换得到的字节是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 14:18:01