flutter 解压 zip 中文乱码问题处理

这篇具有很好参考价值的文章主要介绍了flutter 解压 zip 中文乱码问题处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

很简单的一个 zip 包解压缩的功能,但是 windows 平台中文显示乱码,很糟心,搜了一圈没找到现成的方法,在此贴上我的解决方式。

实现

导入需要的包

flutter pub add archive

flutter pub add fast_gbk

flutter pub add path

代码如下:

import 'dart:io';
import 'package:fast_gbk/fast_gbk.dart';
import 'package:archive/archive.dart';
import 'package:path/path.dart' as p;

void main() {
  unzip('G:/testUpdate/111.zip', 'G:/testUpdate/1');
}

void unzip(String inputPath, String outputPath) {
  var archive = zipDecode(inputPath);

  for (final file in archive) {
    final filename = file.name;
    final filePath = p.join(outputPath, filename);

    if (!file.isFile && !file.isSymbolicLink) {
      Directory(filePath).createSync(recursive: true);
      continue;
    }

    if (file.isSymbolicLink) {
      final link = Link(filePath);
      link.createSync(p.normalize(file.nameOfLinkedFile), recursive: true);
    } else {
      final data = file.content as List<int>;
      final newFile = File(filePath);
      newFile.createSync(recursive: true);
      newFile.writeAsBytesSync(data);
    }
  }
}

// 由于 archive 包直接用会乱码,这里加一下对于 gbk 编码的处理
Archive zipDecode(String inputPath) {
  final zipFile = File(inputPath);
  final bytes = zipFile.readAsBytesSync();
  final inputStream = InputStream(bytes);
  // final inputStream = InputFileStream('G:/testUpdate/111.zip');
  var directory = ZipDirectory.read(inputStream);

  final archive = Archive();

  for (final zfh in directory.fileHeaders) {
    final zf = zfh.file!;

    // The attributes are stored in base 8
    final mode = zfh.externalFileAttributes!;
    final compress = zf.compressionMethod != ZipFile.STORE;

    //dynamic content = zf.rawContent;
    var file = ArchiveFile(
        zf.filename, zf.uncompressedSize!, zf, zf.compressionMethod);

    file.mode = mode >> 16;

    // see https://github.com/brendan-duncan/archive/issues/21
    // UNIX systems has a creator version of 3 decimal at 1 byte offset
    if (zfh.versionMadeBy >> 8 == 3) {
      file.isFile = false;

      final fileType = file.mode & 0xF000;
      switch (fileType) {
        case 0x8000:
        case 0x0000: // No determination can be made so we assume it's a file.
          file.isFile = true;
          break;
        case 0xA000:
          file.isSymbolicLink = true;
          break;
        default:
      }
    } else {
      file.isFile = !file.name.endsWith('/');
    }

    file.crc32 = zf.crc32;
    file.compress = compress;
    file.lastModTime = zf.lastModFileDate << 16 | zf.lastModFileTime;

    final needGbkDecode = zf.flags & 2048 == 0;
    if (needGbkDecode) {
      file.name = gbk.decode(zf.filename.codeUnits);
    }

    archive.addFile(file);
  }

  return archive;
}

昨天刚接触的 flutter,若是代码有问题还望指出,非常感谢!文章来源地址https://www.toymoban.com/news/detail-648244.html

到了这里,关于flutter 解压 zip 中文乱码问题处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive中处理中文乱码问题的解决方法

    中文乱码是在处理大数据时经常遇到的问题之一,尤其是在使用Hive进行数据分析和查询时。本文将介绍一些解决Hive中文乱码问题的方法,并提供相应的源代码示例。 设置Hive的字符集编码 在Hive中,可以通过设置字符集编码来解决中文乱码问题。通过在Hive会话中设置\\\"client.

    2024年02月04日
    浏览(20)
  • 中文乱码处理

    😀前言 中文乱码处理 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划

    2024年02月11日
    浏览(19)
  • Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理

    感谢小伙伴儿的分享: ● 不羁 ● 郭中天 整合调整后的工具类Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo ● WordToPdfUtil用于将word文档转换为pdf格式的工具类 ● ExcelToPdfUtil用于将excel文档转换为pdf格式的工具类 ● PdfToImageUtil用于将pdf文档转换为image格式的工具类

    2024年01月24日
    浏览(35)
  • 9:中文乱码处理-Java Web

    常见字符集包括: ASCII(American Standard Code for Information Interchange) :美国标准信息交换代码,主要用于英语字符的编码,包含128个字符。 ISO-8859系列 :国际标准化组织制定的一系列单字节编码方案,如ISO-8859-1(Latin-1),支持西欧语言字符;ISO-8859-6用于阿拉伯语等。 GB2312/

    2024年02月06日
    浏览(20)
  • 串口打印中文乱码及注释乱码问题

    在使用keil5中出现如下问题: 这时候的解决方法是在keil5顶头工具栏上进入:Edit→Configuration,如下然后进行选择GB2312编码方式: 在检查串口波特率等设置双方均一样之后,还是出现中文乱码问题的解决方法如下: 方法一: ​ 在进行上面的操作后,注释处中文乱码问题解决

    2024年02月07日
    浏览(23)
  • jsp中出现了中文乱码情况处理方案

    问题:jsp中出现了中文乱码情况如何处理。 此类错误是在idea的jsp文件中,完全用HTML的语法来编写代码,故而没有考虑到 其平台与我所指定的页面编码不一 的问题,致使中文乱码,如下: 其本质原因为java的源文件与class字节码文件基于Unicode之上,而jsp与java的保存方式都基

    2024年02月04日
    浏览(17)
  • springMVC--中文乱码处理(新思路--化繁为简)

    前端页面在提交中,可能会出现中文。为了防止前端传入的中文数据出现乱码问题,我们需要使用Spring提供的编码过滤器来统一编码。 要使用编码过滤器,需要在web.xml中进行过滤器配置。 我们也可以选择自己进行配置过滤器。 当表单提交数据为中文时,会出现乱码,为了更

    2024年02月15日
    浏览(27)
  • Ubuntu中文字幕乱码亚洲影视的乱码问题

    Ubuntu看电影总是加载中文字幕的时候出现乱码,后来发现是亚洲影视字符编码的问题,今天休假在家就写了一个小的中文字幕乱码字符转码的程序,目前来说满足我自己的需求了,代码如下: import sys,io if len(sys.argv) != 2: print \\\"Please input file path!\\\" else: f1 = io.open(sys.argv[1], \\\"r\\\", e

    2024年02月11日
    浏览(48)
  • SpringMVC中文乱码(request或response)前后端处理

    前端处理: 后端处理: GET请求(request)乱码处理: POST请求(request)乱码处理: 响应(response)乱码处理:

    2024年02月10日
    浏览(17)
  • VScode注释中文时乱码怎么办?VScode中文注释乱码问题的解决方法

    不管是在哪一种编辑器上,都会有自动默认的一种编码格式,在vscode编辑器中默认的编码格式是utf-8,但是在注释的时候,因为使用的字符会不一样,所以可能存在着默认的配置文件,有可能是其他的编码格式,所以因为编码格式不对应,导致了在注释的时候出现了乱码的情

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包