久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      golang zip中文亂碼怎么解決

      golang zip中文亂碼怎么解決

      問題

      go語(yǔ)言自帶的zip包可以解壓zip文件。然而,如果你用winrar壓縮成zip后。再用go去解壓會(huì)發(fā)現(xiàn)文件名稱是亂碼。而當(dāng)你使用一眾國(guó)產(chǎn)壓縮軟件壓縮后再解壓卻不是亂碼。

      原因

      winrar壓縮時(shí),默認(rèn)采用本地編碼方式來進(jìn)行壓縮。在中國(guó),本地編碼方式一般是GBK。而我們知道go語(yǔ)言字符串都是utf-8格式的,所以有可能出現(xiàn)亂碼的情況。

      golang zip中文亂碼怎么解決

      解決方案

      判定文件名編碼方式,如果為GBK,則轉(zhuǎn)換GBK=》utf-8

      由上面圖片我們知道如果flags字段11bit位為1則是utf-8編碼,0為本地編碼。

      代碼

      代碼中要用到如下兩個(gè)包:

      "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{             //如果標(biāo)致位是0  則是默認(rèn)的本地編碼   默認(rèn)為gbk             i:= bytes.NewReader([]byte(f.Name))             decoder := transform.NewReader(i, simplifiedchinese.GB18030.NewDecoder())             content,_:= ioutil.ReadAll(decoder)             decodeName = string(content)         }else{             //如果標(biāo)志為是 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中文網(wǎng),有大量免費(fèi)的Golang入門教程,歡迎大家學(xué)習(xí)!

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)