我正在尝试将ISO 8859-1编码的字符串转换为UTF-8。
下面的函数可以处理我的testdata,其中包含德语元音变音,但是我不太确定rune(b)转换假设的源代码编码。它是否假设某种默认编码,例如ISO 8859 -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())
}
字符串
3条答案
按热度按时间juzqafwq1#
rune(b)
中的值b
应该是一个unicode值。对于0x 00 - 0xFF,此值与Latin-1相同,因此不必担心。然后你需要将符文编码为UTF8。但这种编码只是通过将
[]rune
转换为string
来完成。这是一个不使用bytes包的函数示例:
字符串
bksxznpy2#
的效果
字符串
是:
rune
(int 32的别名)声明变量r
。r
。不涉及(重新)编码,并且只有通过在代码中显式地编写/处理一些重新编码,才有可能说明应该可选地使用哪一个。幸运的是,在这种情况下不需要(重新)编码,Unicode以与ASCII类似的方式合并了ISO 8859-1的代码。(如果我在这里检查正确)
p5fdfcr13#
要在任何ISO-8859变体(和其他流行的遗留代码页)和UTF-8之间进行转换,请使用golang.org/x/text/encoding/charmap。
要解码此latin 1编码:
字符串
Charmap类型有一个返回 * 编码的NewDecoder方法。Decoder:
型
此解码器可以直接解码字节:
型
如果您的文件具有旧版编码:
型
使用解码器 Package 文件的Reader:
型
并传递新的解码器-读取器:
型