替换特殊字符

时间:2014-11-26 16:11:13

标签: shell unix command special-characters

我有一份文件,其中包含各种特殊字符,例如éð°â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 

这些命令中的任何一个都应该有效,但两者都没有。

1 个答案:

答案 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不支持我们今天理所当然的语言和功能,并且不是一个有用的选项。