我有一份文件,其中包含各种特殊字符,例如éð°âoºi
我写了以下两个命令,这些命令都适用于“单一外观”字符,例如ñÈ。
然而,两者都不适用于上面列出的特殊字符。
此命令使用两个字节的十六进制小数(使用 A 替换é)
sed -i 's/\xc3\xA9/A/g' test.csv
此命令使用utf8替换字符:
CHARS=$(python -c 'print u"\u00a9".encode("utf8")') sed -i 's/['"$CHARS"']/A/g' $filename
这些命令中的任何一个都应该有效,但两者都没有。
答案 0 :(得分:1)
看起来您正在将UTF-8数据视为ISO-8859-1(又名latin1)。
这是您在ISO-8859-1终端中处理UTF-8编码文件时的体验:
$ cat file
The café has crème brûlée.
$ iconv -f utf-8 -t iso-8859-1 < file
The café has crème brûlée.
$ iconv -c -f utf-8 -t ascii//ignore < file
The caf has crme brle.
这通常只适用于PuTTY用户,因为PuTTY是少数几个默认仍使用ISO-8859-1的终端模拟器之一。您可以将其设置为在PuTTY配置中使用UTF-8。
这是UTF-8终端中的相同示例:
$ cat file
The café has crème brûlée.
$ iconv -f utf-8 -t iso-8859-1 < file
The caf� has cr�me br�l�e.
$ iconv -c -f utf-8 -t ascii//ignore < file
The caf has crme brle.
唯一正确的解决方案是修复您的设置,使其始终使用UTF-8。 ISO-8859-1不支持我们今天理所当然的语言和功能,并且不是一个有用的选项。