diff options
author | lunnyxiao <xiaolunwen@gmail.com> | 2014-08-20 16:34:48 +0800 |
---|---|---|
committer | lunnyxiao <xiaolunwen@gmail.com> | 2014-08-20 16:34:48 +0800 |
commit | 97fb62f51ece9353d620780fd13cb9c520413fb8 (patch) | |
tree | 0584335030e94f13f118e9098a99f6a437f339ba /routers/repo/view.go | |
parent | a60edbe88c62f6f5b8c1d74fdd295a2492ef30e9 (diff) | |
download | gitea-97fb62f51ece9353d620780fd13cb9c520413fb8.tar.gz gitea-97fb62f51ece9353d620780fd13cb9c520413fb8.zip |
auto detect text file encode and convert to utf8
Diffstat (limited to 'routers/repo/view.go')
-rw-r--r-- | routers/repo/view.go | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/routers/repo/view.go b/routers/repo/view.go index 9562bb785b..bd1dcb8f99 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -6,6 +6,7 @@ package repo import ( "bytes" + "fmt" "io/ioutil" "path" "path/filepath" @@ -14,12 +15,30 @@ import ( "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/middleware" + + "code.google.com/p/mahonia" + "github.com/saintfish/chardet" ) const ( HOME base.TplName = "repo/home" ) +func toUtf8(content []byte) (error, string) { + detector := chardet.NewTextDetector() + result, err := detector.DetectBest(content) + if err != nil { + return err, "" + } + + if result.Charset == "utf8" { + return nil, string(content) + } + + decoder := mahonia.NewDecoder(result.Charset) + return nil, decoder.ConvertString(string(content)) +} + func Home(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Repo.Repository.Name @@ -98,7 +117,12 @@ func Home(ctx *middleware.Context) { if readmeExist { ctx.Data["FileContent"] = string(base.RenderMarkdown(buf, "")) } else { - ctx.Data["FileContent"] = string(buf) + if err, content := toUtf8(buf); err != nil { + fmt.Println("transfer encode error:", err) + ctx.Data["FileContent"] = string(buf) + } else { + ctx.Data["FileContent"] = content + } } } } |