golang中zip解壓后中文文件名亂碼怎么辦?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創新互聯建站于2013年成立,是專業互聯網技術服務公司,擁有項目成都網站設計、成都做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元雞西做網站,已為上家服務,為雞西各地企業和個人服務,聯系電話:18980820575問題
go語言自帶的zip包可以解壓zip文件。然而,如果你用winrar壓縮成zip后。再用go去解壓會發現文件名稱是亂碼。而當你使用一眾國產壓縮軟件壓縮后再解壓卻不是亂碼。
原因
winrar壓縮時,默認采用本地編碼方式來進行壓縮。在中國,本地編碼方式一般是GBK。而我們知道go語言字符串都是utf-8格式的,所以有可能出現亂碼的情況。
解決方案
判定文件名編碼方式,如果為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 }
以上就是golang中zip解壓后中文文件名亂碼的解決方法,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注創新互聯成都網站設計公司行業資訊,感謝各位的閱讀。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:golang中zip解壓后中文文件名亂碼怎么辦-創新互聯
轉載來于:http://vcdvsql.cn/article0/cdejoo.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、小程序開發、商城網站、網站營銷、網站維護、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯