场景
在链接分享场景中,分享出去的链接,在iOS上预览分享的文本文件,会遇到乱码的问题。很明显时iOS所用的默认编码格式和文本文件的编码格式不一致导致的。
解决方案
依赖三方库 github.com/saintfish/chardet 对文本编码格式进行解析
获取编码格式
// charset.go
import (
"bufio"
"env"
"github.com/saintfish/chardet"
"os"
"storage"
)
func GetCharset(betag string) string {
f, err := os.Open(filePath)
defer f.Close()
reader := bufio.NewReader(f)
buf := make([]byte, 1024)
_, err = reader.Read(buf)
if err != nil {
return ""
}
detector := chardet.NewTextDetector()
charset, err := detector.DetectBest(buf)
return charset.Charset
}
将结果存入数据库
在预览模块返回文件流时带上编码格式
// preview.go
extraHeaders := map[string]string{
//"BETag": fileInfo.Md5sum,
"Content-type": "application-octet-stream",
"Content-Disposition": fmt.Sprintf(`attachment;filename*=UTF-8''%s`,
url.QueryEscape(fileInfo.Name)),
}
ext := fileInfo.FileInfoExt
extBytes, err := ext.MarshalJSON()
var extend proto.FileInfoExt
json.Unmarshal(extBytes, &extend)
if extend.Charset == "" {
extend.Charset = "utf-8"
}
c.DataFromReader(200, fileInfo.Size, fmt.Sprintf("%s;charset=%s", fileInfo.Mime, extend.Charset), r, extraHeaders)
遗留问题
能解析的格式有限