在我的文件中,某种方式正在被添加。我不确定它是什么以及如何添加它。
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
问候。
答案 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