summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mkvlib/shared.go2
-rw-r--r--mkvlib/utils.go19
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)