2014-01-23 97 views
1

我有一个文件在每个字符后面都有可见的^@个字符(蓝色)。我只能在vi file.txt中看到这些字符。我无法使用cat查看这些字符。我怎样才能删除它们?从linux文件中删除^ @个字符

我尝试使用以下命令:

sed "s/[^@]//g" a.txt > b.txt 

然而,这似乎并没有改变文件。

+1

您可以使用'dos2unix'从DOS(窗口的东西)转换为UNIX。 – fedorqui

+0

可能你有一个UTF16编码的文件。在Linux中,您可以在当前的语言环境中看到它,它在大多数情况下都是以字节为导向的(甚至是UTF-8)。你看到的^ @是ASCII码0,16位符号的高位部分对于大多数拉丁字母是0。 – user3159253

+1

这些是空字节(0x00),可能是由于您的文件被编码为UTF-16,每个字符使用两个字节,因此对于正常的ASCII文本具有与ASCII字节交织的空字节。 –

回答

2

尝试iconv -f UTF16 -t UTF8 <your-file> > <new-file>

+0

谢谢,这工作。 – user1882633

+0

@ user1882633我得到以下错误:iconv:不完整的字符或缓冲区末尾的移位序列无论如何,你可以帮助我吗? :D –

+0

你确定你的源文件是一个有效的UTF16吗? – user3159253

0

dos2unix file.txt file.txt。这将做..

+1

您需要dos2unix> = 6.0才能将UTF-16文件转换为UTF-8。 –

0

这工作:

sed "s/[\^@]//g" a.txt > b.txt 
相关问题