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

以下函数适用于包含德语变音符的testdata,但是我不太确定假设使用哪种编码rune(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())
}

最佳答案

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

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

这是不使用字节包的函数示例:

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)
}

关于character-encoding - golang将iso8859-1转换为utf8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13510458/

10-08 23:51