如何有效地将 utf-8-mac 转换为 utf

How to effectiv convert utf-8-mac to utf

我必须定期将包含 uft-8-mac 字符串的文件转换为 uft-8。我开始用 iconv 来完成这项工作。 如果必须转换的行太多,iconv 如何抛出错误。 这是重现错误的脚本

#!/bin/zsh
set -eu

for i in {1..1000}; do
  echo "$i:äöüß@€" >> /tmp/xx
  iconv -f utf-8-mac -t utf-8 /tmp/xx > /dev/null
done

显然我可以拆分文件,但我得到了很多文件。

有人有其他解决方法或工具吗?或者 golang 中的代码示例?

我试过了

func main() {
    dat, err := os.ReadFile(".backup_files.unconv")
    if err != nil {
        log.Fatal(err)
    }
    output := ".backup_files.goconv"
    w, err := os.Create(output)
    if err != nil {
        log.Fatalf("Can't create %s, %v", output, err)
    }
    defer closeFile(w)
    wc := norm.NFC.Writer(w)
    defer wc.Close()
    wc.Write(dat)
}

但它与iconv 结果不同。 提前致谢。

找到合适的解决方案: 你可以使用uconv utility from ICU. Normalization是通过音译实现的(-x).

在 Debian、Ubuntu 和其他衍生产品上,uconvlibicu-dev 包中。在 Fedora、Red Hat 和其他衍生产品以及 BSD 端口中,它位于 icu 包中。

感谢Gilles 'SO- stop being evil'