将Â替换为文件中的空格

时间:2018-01-08 18:10:32

标签: unix sed character-encoding

在我的文件中,某种方式正在被添加。我不确定它是什么以及如何添加它。

12345A 210 CBCDEM

我想从文件中删除此字符。我尝试了基本的sed命令来删除但不成功。

  sed -i -e 's/\Â//g'

我还读到 dos2unix 将完成这项工作,但不幸的是,这也没有用。假设它是十六进制字符我也尝试使用十六进制值 sed -i 's/\xc2//g' 删除它但是也没有工作< / p>

我真的很想了解这个角色是什么以及它是如何被添加的。此外,是否有可能删除文件中的所有此类字符。

添加编码细节: -

file test.txt 
test.txt: ISO-8859 text
echo $LANG
en_US.UTF-8

操作系统详细信息: -

uname -a
Linux vm-testmachine-001 3.10.0-693.11.1.el7.x86_64 #1 SMP Fri Oct 27 05:39:05 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

问候。

1 个答案:

答案 0 :(得分:3)

看起来编写文件的程序(在ISO-8859的某些部分中)和读取文件的程序(假设它是UTF-8)之间的编码不匹配。这是iconv的教科书用例。实际上,手册页中的示例几乎完全适用于您的情况:

iconv -f iso-8859-1 -t utf-8 test.txt

iconv是我见过的几乎所有Unix发行版的fairly standard程序,所以你不应该在这里遇到任何问题。

基于你似乎用英语作为主要语言写作的事实,你可能正在寻找iso-8859-1,这显然很受欢迎。

如果这不能解决您的问题,您可能需要找到适合您数据库输出的编码。你可以做到

iconv -l

获取iconv可用的编码列表,并使用适合您的编码。请注意,file ISO-8859 text的输出不是绝对的。在许多情况下,无法区分纯ASCII和UTF-8之类的东西。如果我没有弄错的话,file会根据文件中字符代码的频率使用启发式方法来确定编码。如果样本很小和/或含糊不清,则很容易出错。

如果要保存iconv的输出并且您的版本支持-o标志,则可以使用它。否则,请使用重定向,但要小心:

TMP=$(mktemp)
iconv -f iso-8859-1 -t utf-8 test.txt > "$TMP" && mv "$TMP" test.txt