Add support for CJK to/from utf-8 (irc). #400

This commit is contained in:
Wim 2018-05-11 21:55:53 +02:00
parent bf0b9959d1
commit 75381c2c6e

View File

@ -7,6 +7,7 @@ import (
"github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper" "github.com/42wim/matterbridge/bridge/helper"
"github.com/dfordsoft/golib/ic"
"github.com/lrstanley/girc" "github.com/lrstanley/girc"
"github.com/paulrosania/go-charset/charset" "github.com/paulrosania/go-charset/charset"
_ "github.com/paulrosania/go-charset/data" _ "github.com/paulrosania/go-charset/data"
@ -177,15 +178,20 @@ func (b *Birc) Send(msg config.Message) (string, error) {
// convert to specified charset // convert to specified charset
if b.GetString("Charset") != "" { if b.GetString("Charset") != "" {
buf := new(bytes.Buffer) switch b.GetString("Charset") {
w, err := charset.NewWriter(b.GetString("Charset"), buf) case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp":
if err != nil { msg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), msg.Text)
b.Log.Errorf("charset from utf-8 conversion failed: %s", err) default:
return "", err buf := new(bytes.Buffer)
w, err := charset.NewWriter(b.GetString("Charset"), buf)
if err != nil {
b.Log.Errorf("charset from utf-8 conversion failed: %s", err)
return "", err
}
fmt.Fprintf(w, msg.Text)
w.Close()
msg.Text = buf.String()
} }
fmt.Fprintf(w, msg.Text)
w.Close()
msg.Text = buf.String()
} }
// Handle files // Handle files
@ -404,13 +410,18 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) {
mycharset = "ISO-8859-1" mycharset = "ISO-8859-1"
} }
} }
r, err = charset.NewReader(mycharset, strings.NewReader(rmsg.Text)) switch mycharset {
if err != nil { case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp":
b.Log.Errorf("charset to utf-8 conversion failed: %s", err) rmsg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), rmsg.Text)
return default:
r, err = charset.NewReader(mycharset, strings.NewReader(rmsg.Text))
if err != nil {
b.Log.Errorf("charset to utf-8 conversion failed: %s", err)
return
}
output, _ := ioutil.ReadAll(r)
rmsg.Text = string(output)
} }
output, _ := ioutil.ReadAll(r)
rmsg.Text = string(output)
b.Log.Debugf("<= Sending message from %s on %s to gateway", event.Params[0], b.Account) b.Log.Debugf("<= Sending message from %s on %s to gateway", event.Params[0], b.Account)
b.Remote <- rmsg b.Remote <- rmsg