diff options
| -rw-r--r-- | mkvlib/shared.go | 2 | ||||
| -rw-r--r-- | mkvlib/utils.go | 19 |
2 files changed, 19 insertions, 2 deletions
diff --git a/mkvlib/shared.go b/mkvlib/shared.go index 979b109..bef7a3b 100644 --- a/mkvlib/shared.go +++ b/mkvlib/shared.go @@ -11,7 +11,7 @@ import ( ) const libName = "mkvlib" -const libVer = "v1.8.8" +const libVer = "v1.8.9" const LibFName = libName + " " + libVer diff --git a/mkvlib/utils.go b/mkvlib/utils.go index 85ef657..a72c5bd 100644 --- a/mkvlib/utils.go +++ b/mkvlib/utils.go @@ -4,6 +4,8 @@ import ( "errors" "fmt" "github.com/gogs/chardet" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" "golang.org/x/text/encoding/unicode" "golang.org/x/text/transform" "io" @@ -220,8 +222,23 @@ func randomStr(l int) string { func toUTF8(data []byte) string { d := chardet.NewTextDetector() if r, err := d.DetectBest(data); err == nil { - if r.Charset == "UTF-16LE" { + switch r.Charset { + case "UTF-16LE": data, _, _ = transform.Bytes(unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM).NewDecoder(), data) + break + case "UTF-16BE": + data, _, _ = transform.Bytes(unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM).NewDecoder(), data) + break + case "GBK", "GB2312": + data, _, _ = transform.Bytes(simplifiedchinese.GBK.NewDecoder(), data) + break + case "GB18030": + data, _, _ = transform.Bytes(simplifiedchinese.GB18030.NewDecoder(), data) + break + case "Big5": + data, _, _ = transform.Bytes(traditionalchinese.Big5.NewDecoder(), data) + break + } } return string(data) |
