Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 942a176db172214758e069e6bae3ae8bd2cda883 Author: Wim <wim@42.be> Date: Fri May 11 21:55:53 2018 +0000 Add support for CJK to/from utf-8 (irc). #400 diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index 8318400..1e26b77 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -76 +77 @@ import (   "github.com/42wim/matterbridge/bridge"   "github.com/42wim/matterbridge/bridge/config"   "github.com/42wim/matterbridge/bridge/helper" + "github.com/dfordsoft/golib/ic"   "github.com/lrstanley/girc"   "github.com/paulrosania/go-charset/charset"   _ "github.com/paulrosania/go-charset/data" @@ -17715 +17820 @@ func (b *Birc) Send(msg config.Message) (string, error) {     // convert to specified charset   if b.GetString("Charset") != "" { - 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 + switch b.GetString("Charset") { + case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp": + msg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), msg.Text) + default: + 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 @@ -40413 +41018 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) {   mycharset = "ISO-8859-1"   }   } - r, err = charset.NewReader(mycharset, strings.NewReader(rmsg.Text)) - if err != nil { - b.Log.Errorf("charset to utf-8 conversion failed: %s", err) - return + switch mycharset { + case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp": + rmsg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), rmsg.Text) + 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.Remote <- rmsg