我有一批编码错误的记录。
这种一线给我一个正确的结果

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并决定自己如何处理无法表示的字符。

08-06 18:29