25 lines
610 B
Go
25 lines
610 B
Go
package filesystem
|
||
|
||
import (
|
||
"bytes"
|
||
"io"
|
||
"unicode/utf8"
|
||
|
||
"golang.org/x/text/encoding/simplifiedchinese"
|
||
"golang.org/x/text/transform"
|
||
)
|
||
|
||
// BytesToString 智能编码转换:UTF-8 直接返回,否则尝试 GBK → UTF-8
|
||
func BytesToString(data []byte) string {
|
||
if utf8.Valid(data) {
|
||
return string(data)
|
||
}
|
||
// 尝试 GBK 解码
|
||
reader := transform.NewReader(bytes.NewReader(data), simplifiedchinese.GBK.NewDecoder())
|
||
decoded, err := io.ReadAll(reader)
|
||
if err != nil || !utf8.Valid(decoded) {
|
||
return string(data) // 转换失败或结果无效,返回原始内容
|
||
}
|
||
return string(decoded)
|
||
}
|