我有一批编码错误的记录。
这种一线给我一个正确的结果
cat example.txt | iconv -f utf-8 -t iso8859-2
但是以下程序给我一个错误
encoding: rune not supported by encoding.
func main() {
s:= []byte {196, 144, 194, 154, 196, 144, 194, 176, 196, 144, 197, 186, 196, 144, 196, 190, 197, 131, 194, 128, 196, 144, 194, 176, 32, 52, 52, 53, 54, 50, 53, 54, 10, 10, 0, 0, }
fmt.Println(s)
dec := charmap.ISO8859_2.NewEncoder()
out, err := dec.Bytes(s)
if err != nil {
fmt.Println(err)
return
}
expectedOutput := "Камера 4456256"
fmt.Println("result", string(out), "expect:", expectedOutput)
}
我想知道没有iconv绑定(bind)是否可以解决我的问题?
最佳答案
搜索charmap.ISO8859_2
会给出您正在使用golang.org/x/text的表达式。
在给定Charmap
的情况下,我们在这里看到转换是如何完成的:
https://github.com/golang/text/blob/4d1c5fb19474adfe9562c9847ba425e7da817e81/encoding/charmap/charmap.go#L206
特定行突出显示错误的来源。因此,您的输入包含utf8中的字符,这些字符不能在iso8859-2中表示或无效的utf8。
您看到Here,该错误已如实地传递给您,并且RepertoireError中replacement
的使用似乎是一个红色鲱鱼。
当然,您不需要iconv绑定(bind)。您可以逐个字符地遍历输入的字符并将其编码为iso8859-2并决定自己如何处理无法表示的字符。