Flutter 解压 与解压中文遇到的编码问题

今天寻思寻思写点啥,不知道写点啥,想起差不多一年前魔改了个flutter压缩库.

地址:  https://github.com/jun7572/flutter_zip.git

背景是当时公司有好些zip,这些zip的文件头读不出来还是咋地.结果人家的压缩库根本解压不了.我改了这个压缩库默认读不出的话就是使用gbk,就能解压了.


andriod 这边是 

package com.june.flutterzip;

import android.text.TextUtils;

import android.util.Log;

import org.zeroturnaround.zip.ZipEntryCallback;

import org.zeroturnaround.zip.ZipInfoCallback;

import org.zeroturnaround.zip.ZipUtil;

import org.zeroturnaround.zip.commons.FileUtils;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.nio.charset.Charset;

import java.util.HashMap;

import java.util.Map;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

import java.util.zip.ZipInputStream;

import io.flutter.plugin.common.MethodChannel;

public class ArchiveManager {

static private  long unziplong=0;

    static private  long filesize=0;

    static void unzip(String unzipPath, final String outPath,final MethodChannel channel,final MethodChannel.Result result){

unziplong=0;

//        ZipUtil.unpack(new File(unzipPath), new File(outPath), Charset.forName("GBK"));

//判断编码

        String s=null;

        try {

s = codeString(unzipPath);

            Log.e("test","编码为="+s);

        }catch (Exception e) {

e.printStackTrace();

        }

if(TextUtils.isEmpty(s)){

s="GBK";

        }

//获取大小

        File file =new File(unzipPath);

        try {

ZipFile zf=new ZipFile(unzipPath);

            int size = zf.size();

            filesize=size;

            Log.e("test","文件数量="+size);

        }catch (IOException e) {

e.printStackTrace();

        }

//解压

        ZipUtil.iterate(file, new ZipEntryCallback() {

@Override

public void process(InputStream in, ZipEntry zipEntry)throws IOException {

unziplong++;

                File file =new File(outPath,zipEntry.getName());

                    if (zipEntry.isDirectory()) {

FileUtils.forceMkdir(file);

                    }else {

FileUtils.forceMkdir(file.getParentFile());

                        FileUtils.copy(in, file);

                    }

Map map=new HashMap<>();

                map.put("total",filesize);

                map.put("percent",unziplong);

//                channel.invokeMethod("process",map);

              if(filesize==unziplong){

result.success(null);

              }

}

},Charset.forName(s));

        //

    }

private static String codeString(String fileName)throws Exception {

BufferedInputStream bin =new BufferedInputStream(new FileInputStream(

fileName));

        int p = (bin.read() <<8) + bin.read();

        String code =null;

        switch (p) {

case 0xefbb:

code ="UTF-8";

break;

            case 0xfffe:

code ="Unicode";

break;

            case 0xfeff:

code ="UTF-16BE";

break;

            default:

code ="GBK";

        }

return code;

    }

}



ios 这边是


if (floor(NSFoundationVersionNumber)> NSFoundationVersionNumber10_9_2) {

#endif

                    // supported encodings are in [NSString availableStringEncodings]

                  NSArray<NSNumber*> *encodings=@[@(kCFStringEncodingMacChineseSimp), @(kCFStringEncodingShiftJIS)];

for (NSNumber*encoding in encodings) {

strPath= [NSString stringWithCString:filename encoding:(NSStringEncoding)CFStringConvertEncodingToNSStringEncoding(encoding.unsignedIntValue)];

if (strPath) {

break;

}

}

}else {

// fallback to a simple manual detect for macOS 10.9 or older

                    NSArray<NSNumber*> *encodings=@[@(kCFStringEncodingMacChineseSimp), @(kCFStringEncodingShiftJIS)];

for (NSNumber*encoding in encodings) {

strPath= [NSString stringWithCString:filename encoding:(NSStringEncoding)CFStringConvertEncodingToNSStringEncoding(encoding.unsignedIntValue)];

if (strPath) {

break;

}

}

}


都是读不出来的时候,就默认使用中文的编码.

attention!!! 注意了!!!这个地址基本我不会维护了,没这时间精力.有用得话就fork去.

希望能帮助同样遇到问题的铁字./滑稽

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容