웹 개발 분야에서 Golang의 지속적인 인기와 적용으로 인해 Zip 압축 파일은 필수적인 기능 모듈이 되었습니다. 그러나 일부 개발자는 파일 압축을 위해 Golang의 Zip 패키지를 사용할 때 중국어 파일 이름이 왜곡되어 나타나는 일반적인 문제에 직면했습니다.
이것은 매우 귀찮은 문제입니다. 원래 아름다운 파일 이름을 설명할 수 없게 만들 뿐만 아니라 일련의 다른 오류를 일으킬 수도 있기 때문입니다. 아래에서는 이 문제의 원인과 해결 방법을 살펴보겠습니다.
문제 원인
Zip 형식은 파일 이름, 파일 디렉터리, 압축 방법 및 압축된 데이터가 포함된 바이너리 형식입니다. 이 정보 중 파일명은 사용자가 압축을 푼 후 해당 파일의 이름과 저장 경로를 결정하기 때문에 매우 중요한 부분이다.
그러나 파일 시스템과 인코딩 형식이 다르면 동일한 파일 이름에 대한 구문 분석 결과가 다를 수 있습니다. 예를 들어, Windows 시스템에서 파일 이름에 사용되는 기본 인코딩은 GBK인 반면 UNIX/Linux 시스템에서는 파일 이름에 UTF-8이 사용됩니다. 압축을 위해 Golang에서 Zip 패키지를 사용할 때 이러한 다양한 인코딩 방법을 처리하지 않으면 파일 이름이 잘못된 문자로 처리될 수 있습니다.
솔루션
한자 파일 이름이 왜곡되는 문제에 대한 다양한 솔루션을 보유하고 있습니다. 아래에서는 보다 실현 가능한 몇 가지 방법을 소개합니다.
방법 1: GB18030 인코딩 변환
Zip 형식은 CP437 인코딩을 사용하여 파일 이름을 나타내기 때문에 파일 이름을 GB18030 인코딩에서 CP437 인코딩으로 변환하여 모든 환경 이름에서 파일을 올바르게 구문 분석할 수 있습니다. Go에서는 golang.org/x/text/encoding/simplifiedchinese
패키지를 사용하여 GB18030 인코딩과 CP437 인코딩 간에 변환할 수 있습니다. golang.org/x/text/encoding/simplifiedchinese
包来进行 GB18030 编码和 CP437 编码的互转换。
import ( "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" ) func GbkToUtf8(data []byte) ([]byte, error) { return transform.NewReader(bytes.NewReader(data), simplifiedchinese.GB18030.NewDecoder()).ReadAll() } func Utf8ToGbk(data []byte) ([]byte, error) { return transform.NewReader(bytes.NewReader(data), simplifiedchinese.GB18030.NewEncoder()).ReadAll() }
方法二:使用 reflect
我们还可以使用 reflect
包中的 StructTag
选项,强制使用指定的编码方式。具体可以在结构体中添加 zip
的 Tag,在 Tag 中加一个 chinese-utf8
的标签就可以了。示例代码如下:
type File struct { Name string `zip:"filename=测试文件,chinese-utf8"` } func main() { zhName := "测试文件" utf8Name, _ := GbkToUtf8([]byte(zhName)) f := &File{Name: string(utf8Name)} // 压缩文件... }
方法三:使用 fileheader 和 FileInfo 中的 name 属性
在 Golang 的 Zip 包中,我们还可以通过调用 fileheader
和 FileInfo
的 name
import "archive/zip" func zipFiles(filePaths []string, dest string) error { // 创建文件 newZipFile, err := os.Create(dest) if err != nil { return err } defer newZipFile.Close() // 创建 ZIP writer 对象 zipWriter := zip.NewWriter(newZipFile) defer zipWriter.Close() // 遍历 filePaths,为每个文件设置正确的编码方式 for _, filePath := range filePaths { zipFile, err := os.Open(filePath) if err != nil { return err } defer zipFile.Close() // 解析文件名,并转换编码 zipFileInfo, _ := zip.FileInfoHeader(zipFile.Stat()) zipFileInfo.Name, _ = GbkToUtf8([]byte(zipFileInfo.Name)) // 创建 Zip 文件写入器 zipWriterNewFile, err := zipWriter.CreateHeader(zipFileInfo) if err != nil { return err } // 读取文件并写入 Zip 文件中 _, err = io.Copy(zipWriterNewFile, zipFile) if err != nil { return err } } return nil }방법 2: Reflect 사용
reflect
패키지의 StructTag
옵션을 사용하여 지정된 인코딩 방법을 강제로 사용할 수도 있습니다. 구체적으로 zip
태그를 구조에 추가하고 chinese-utf8
태그를 태그에 추가할 수 있습니다. 샘플 코드는 다음과 같습니다. rrreee
방법 3: fileheader 및 FileInfo에서 name 속성을 사용합니다. 🎜🎜Golang Zip 패키지에서는fileheader
및 FileInfo
를 호출할 수도 있습니다. name
속성을 사용하여 각 파일에 대한 올바른 인코딩을 수동으로 지정합니다. 🎜rrreee🎜결론🎜🎜중국어 파일 이름이 왜곡되는 문제에 대해 Golang의 Zip 패키지는 다양한 솔루션을 제공합니다. 파일명의 인코딩 형식이 일정하지 않으면 파일명이 깨질 수 있습니다. 필요에 따라 올바른 솔루션을 선택하기만 하면 이 문제를 쉽게 피할 수 있습니다. 🎜위 내용은 golang zip 중국어 왜곡 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Golang은 실제 응용 분야에서 탁월하며 단순성, 효율성 및 동시성으로 유명합니다. 1) 동시 프로그래밍은 Goroutines 및 채널을 통해 구현됩니다. 2) Flexible Code는 인터페이스 및 다형성을 사용하여 작성됩니다. 3) NET/HTTP 패키지로 네트워크 프로그래밍 단순화, 4) 효율적인 동시 크롤러 구축, 5) 도구 및 모범 사례를 통해 디버깅 및 최적화.

GO의 핵심 기능에는 쓰레기 수집, 정적 연결 및 동시성 지원이 포함됩니다. 1. Go Language의 동시성 모델은 고루틴 및 채널을 통한 효율적인 동시 프로그래밍을 실현합니다. 2. 인터페이스 및 다형성은 인터페이스 방법을 통해 구현되므로 서로 다른 유형을 통일 된 방식으로 처리 할 수 있습니다. 3. 기본 사용법은 기능 정의 및 호출의 효율성을 보여줍니다. 4. 고급 사용에서 슬라이스는 동적 크기 조정의 강력한 기능을 제공합니다. 5. 레이스 조건과 같은 일반적인 오류는 Getest-race를 통해 감지 및 해결할 수 있습니다. 6. 성능 최적화는 sync.pool을 통해 개체를 재사용하여 쓰레기 수집 압력을 줄입니다.

Go Language는 효율적이고 확장 가능한 시스템을 구축하는 데 잘 작동합니다. 장점은 다음과 같습니다. 1. 고성능 : 기계 코드로 컴파일, 빠른 달리기 속도; 2. 동시 프로그래밍 : 고어 라틴 및 채널을 통한 멀티 태스킹 단순화; 3. 단순성 : 간결한 구문, 학습 및 유지 보수 비용 절감; 4. 크로스 플랫폼 : 크로스 플랫폼 컴파일, 쉬운 배포를 지원합니다.

SQL 쿼리 결과의 정렬에 대해 혼란스러워합니다. SQL을 학습하는 과정에서 종종 혼란스러운 문제가 발생합니다. 최근 저자는 "Mick-SQL 기본 사항"을 읽고 있습니다.

기술 스택 컨버전스와 기술 선택의 관계, 소프트웨어 개발에서 기술 스택의 선택 및 관리는 매우 중요한 문제입니다. 최근에 일부 독자들은 ...

골란 ...

GO 언어로 세 가지 구조를 비교하고 처리하는 방법. GO 프로그래밍에서는 때때로 두 구조의 차이점을 비교하고 이러한 차이점을 ...에 적용해야합니다.

GO에서 전 세계적으로 설치된 패키지를 보는 방법? Go Language로 발전하는 과정에서 Go는 종종 사용합니다 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
