golang将iso8859-1转换为utf8

时间:2012-11-22 10:18:12

标签: character-encoding go

我正在尝试将ISO 8859-1编码的字符串转换为UTF-8。

以下函数适用于包含德语变音符号的testdata,但我不太确定符文(b)演员的编码源代码。是假设某种默认编码,例如ISO8859-1或有什么方法可以告诉它使用什么编码?

func toUtf8(iso8859_1_buf []byte) string {
   var buf = bytes.NewBuffer(make([]byte, len(iso8859_1_buf)*4))
   for _, b := range(iso8859_1_buf) {
      r := rune(b)
      buf.WriteRune(r)
   }
   return string(buf.Bytes())
}

2 个答案:

答案 0 :(得分:13)

符文 int32 的别名,当涉及编码时,假定符文具有Unicode字符值(代码点)。因此b中的值rune(b)应该是unicode值。对于0x00 - 0xFF,此值与Latin-1相同,因此您不必担心它。

然后你需要将符文编码为UTF8。但是,只需将[]rune转换为string即可完成此编码。

这是一个不使用bytes包的函数示例:

func toUtf8(iso8859_1_buf []byte) string {
    buf := make([]rune, len(iso8859_1_buf))
    for i, b := range iso8859_1_buf {
        buf[i] = rune(b)
    }
    return string(buf)
}

答案 1 :(得分:2)

的影响
r := rune(expression)

是:

  • 使用类型r声明变量rune(int32的别名)。
  • 使用expresion的值初始化变量r

不涉及(重新)编码,并且只能通过在代码中显式写入/处理某些重新编码来说明应该选择使用哪一个。幸运的是,在这种情况下,不需要(重新)编码,Unicode以与ASCII相当的方式合并了ISO 8859-1的代码。 (如果我检查正确here