首页 >

golang zip中文乱码怎么解决

后端开发|Golanggolang zip中文乱码怎么解决
golang,zip,中文乱码
后端开发-Golang
大商创源码进不去后台,vscode代码不能运行,ubuntu退出直径,cmd 执行tomcat,sqlite怎么取指定数量,二次元图片爬虫软件,php 对象的类名,秦皇岛seo外包公司,免费网站采集软件下载,柱状统计图模板lzw
问题
彩票源码出售出租,重启vscode保留工作区,ubuntu页面小,文件读取tomcat路径,爬虫蜘蛛图片,php 获取变量名,潍城seo优化推广价格,分类网站源码 php,书画网站模板下载lzw
go语言自带的zip包可以解压zip文件。然而,如果你用winrar压缩成zip后。再用go去解压会发现文件名称是乱码。而当你使用一众国产压缩软件压缩后再解压却不是乱码。
聚合支付码支付接口源码,ubuntu北通手柄,ppt网站爬虫下载,php临时队列,地产seo推荐lzw
原因

winrar压缩时,默认采用本地编码方式来进行压缩。在中国,本地编码方式一般是GBK。而我们知道go语言字符串都是utf-8格式的,所以有可能出现乱码的情况。

golang zip中文乱码怎么解决

解决方案

判定文件名编码方式,如果为GBK,则转换GBK=》utf-8

由上面图片我们知道如果flags字段11bit位为1则是utf-8编码,0为本地编码。

代码

代码中要用到如下两个包:

“golang.org/x/text/encoding/simplifiedchinese”

“golang.org/x/text/transform”

func Unzip(zipFile string, destDir string) error {    zipReader, err := zip.OpenReader(zipFile)    if err != nil {        return err    }    defer zipReader.Close()    var decodeName string    for _, f := range zipReader.File {        if f.Flags == 0{            //如果标致位是0  则是默认的本地编码   默认为gbk            i:= bytes.NewReader([]byte(f.Name))            decoder := transform.NewReader(i, simplifiedchinese.GB18030.NewDecoder())            content,_:= ioutil.ReadAll(decoder)            decodeName = string(content)        }else{            //如果标志为是 1 << 11也就是 2048  则是utf-8编码            decodeName = f.Name        }        fpath := filepath.Join(destDir, decodeName)        if f.FileInfo().IsDir() {            os.MkdirAll(fpath, os.ModePerm)        } else {            if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {return err            }            inFile, err := f.Open()            if err != nil {return err            }            defer inFile.Close()            outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())            if err != nil {return err            }            defer outFile.Close()            _, err = io.Copy(outFile, inFile)            if err != nil {return err            }        }    }    return nil}

PHP中文网,有大量免费的Golang入门教学,欢迎大家学习!


golang zip中文乱码怎么解决
  • MySQL中文汉字乱码问题分析
  • MySQL中文汉字乱码问题分析 | MySQL中文汉字乱码问题分析 ...

    golang zip中文乱码怎么解决
  • linux查看日志出现中文乱码
  • linux查看日志出现中文乱码 | linux查看日志出现中文乱码 ...

    golang zip中文乱码怎么解决
  • php json_encode实现与中文乱码解决方法
  • php json_encode实现与中文乱码解决方法 | php json_encode实现与中文乱码解决方法 ...