我正在尝试将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/