转换后如何摆脱不可见的字符

时间:2017-06-27 08:02:53

标签: unix ksh

我想将包含特殊撇号的Windows UTF8文件转换为unix ISO-8859-1文件。我就是这样做的:

# -- unix file
tr -d '\015' < my_utf8_file.xml > t_my_utf8_file.xml

# -- get rid of special apostrophe
sed "s/’/'/g" t_my_utf8_file.xml > temp_my_utf8_file.xml

#  -- change the xml header
sed "s/UTF-8/ISO-8859-1/g" temp_my_utf8_file.xml > my_utf8_file_temp.xml

# -- the actual charecter set conversion
iconv -c -f UTF-8 -t ISO8859-1 my_utf8_file_temp.xml > my_file.xml

一切都很好,但我的一个文件中有一件事。看起来文件的开头最初有一个不可见的字符。当我在Notepadd ++中打开my_file.xml时,我在文件的开头看到一个SUB。在Unix VI中,我看到^ Z。

我应该在unix脚本中添加什么以及在哪里删除这些类型的字符。

谢谢

1 个答案:

答案 0 :(得分:0)

要准确找出您正在处理的字符,请隔离相关的行(在这种情况下,像head -1 <file>之类的简单内容就足够了)并将结果传递给od(使用用于显示所需格式的字符的适当标志):

head -1 <file> | od -c   # view as character
head -1 <file> | od -d   # view as decimal
head -1 <file> | od -o   # view as octal
head -1 <file> | od -x   # view as hex

一旦你知道你正在处理的角色,你可以使用你最喜欢的命令(例如,trsed)删除所述角色。