unicode按字面输出而不是unicode

时间:2015-12-30 00:06:29

标签: go irc

我正在创建一个IRC机器人,使用Go作为第一个掌握该语言的项目。其中一个机器人功能是从TVmaze API中获取数据并显示在频道中。

我导入了一个env包,允许机器人管理员定义输出的显示方式。

例如SHOWSTRING="#showname# - #status# – #network.name#"

我正在尝试为其添加功能,以便管理员可以使用IRC格式化功能,例如使用\u0002 this is bold \u0002访问。

我有一个函数可以生成返回并显示在通道中的字符串。

func generateString(show Show) string {
  str := os.Getenv("SHOWSTRING")
  r := strings.NewReplacer(
    "#ID#", string(show.ID),
    "#showname#", show.Name,
    "#status#", show.Status,
    "#network.name#", show.Network.Name,
  )
  result := r.Replace(str)
  return result
}

根据我的阅读,我认为我需要使用rune数据类型而不是字符串,然后在输出之前将符文转换为字符串。

我使用https://github.com/thoj/go-irceven包与IRC进行交互。

虽然我认为使用rune是正确的方法,但我尝试了一些令我困惑的事情。

如果我从env向SHOWSTRING添加\u0002,它将返回\u0002House\u0002 - Ended - Fox。我是在con.Privmsg(roomName, tvmaze.ShowLookup('house'))

这样做的

但是,如果我尝试con.Privmsg(roomName, "\u0002This should be bold\u0002"),则输出粗体文字。

这里最好的选择是什么?如果它将字符串转换为符文然后再转换为字符串,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

我需要在函数返回时使用strconv.Unquote()

新的generateString函数现在输出正确的字符串,看起来像这样

func generateString(show Show) string {
  str := os.Getenv("SHOWSTRING")
  r := strings.NewReplacer(
    "#ID#", string(show.ID),
    "#showname#", show.Name,
    "#status#", show.Status,
    "#network.name#", show.Network.Name,
  )
  result := r.Replace(str)
  ret, err := strconv.Unquote(`"` + result + `"`)
  if err != nil {
    fmt.Println("Error unquoting the string")
  }
  return ret
}