Browse Source

在字幕下载保存到本地后,判断是否需要调整字幕的编码

Signed-off-by: allan716 <[email protected]>
allan716 3 years ago
parent
commit
b16e9abaeb

+ 42 - 0
internal/pkg/change_file_encode/change_file_encode.go

@@ -0,0 +1,42 @@
+package change_file_encode
+
+import (
+	"errors"
+	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
+	"os"
+)
+
+func Process(srcSubFileFPath string, desCode int) error {
+
+	fBytes, err := os.ReadFile(srcSubFileFPath)
+	if err != nil {
+		return err
+	}
+	// 默认 0 是 UTF-8,1 是 GBK
+	if desCode == 0 {
+		// 0 是 UTF-8
+		coding2UTF8, err := language.ChangeFileCoding2UTF8(fBytes)
+		if err != nil {
+			return err
+		}
+		err = os.WriteFile(srcSubFileFPath, coding2UTF8, os.ModePerm)
+		if err != nil {
+			return err
+		}
+	} else if desCode == 1 {
+		// 1 是 GBK
+		coding2UTF8, err := language.ChangeFileCoding2GBK(fBytes)
+		if err != nil {
+			return err
+		}
+		err = os.WriteFile(srcSubFileFPath, coding2UTF8, os.ModePerm)
+		if err != nil {
+			return err
+		}
+	} else {
+		return errors.New(fmt.Sprintf("change_file_encode.Process(), not support encode type == %v", desCode))
+	}
+
+	return nil
+}

+ 0 - 1
internal/pkg/change_file_encode_2_gbk/change_file_encode_2_gbk.go

@@ -1 +0,0 @@
-package change_file_encode_2_gbk

+ 10 - 0
internal/pkg/downloader/downloader_things.go

@@ -1,6 +1,7 @@
 package downloader
 package downloader
 
 
 import (
 import (
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/change_file_encode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	subcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/common"
 	subcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/common"
@@ -200,6 +201,15 @@ func (d *Downloader) writeSubFile2VideoPath(videoFileFullPath string, finalSubFi
 			return err
 			return err
 		}
 		}
 	}
 	}
+	// 判断是否需要转换字幕的编码
+	if d.settings.ExperimentalFunction.AutoChangeSubEncode.Enable == true {
+		d.log.Infoln("----------------------------------")
+		d.log.Infoln("change_file_encode to", d.settings.ExperimentalFunction.AutoChangeSubEncode.GetDesEncodeType())
+		err = change_file_encode.Process(desSubFullPath, d.settings.ExperimentalFunction.AutoChangeSubEncode.DesEncodeType)
+		if err != nil {
+			return err
+		}
+	}
 
 
 	return nil
 	return nil
 }
 }

+ 10 - 0
internal/pkg/settings/auto_change_sub_encode.go

@@ -4,3 +4,13 @@ type AutoChangeSubEncode struct {
 	Enable        bool `json:"enable"`
 	Enable        bool `json:"enable"`
 	DesEncodeType int  `json:"des_encode_type"` // 默认 0 是 UTF-8,1 是 GBK
 	DesEncodeType int  `json:"des_encode_type"` // 默认 0 是 UTF-8,1 是 GBK
 }
 }
+
+func (a AutoChangeSubEncode) GetDesEncodeType() string {
+	if a.DesEncodeType == 0 {
+		return "UTF-8"
+	} else if a.DesEncodeType == 1 {
+		return "GBK2312"
+	} else {
+		return "no support type"
+	}
+}