Unix 如何处理文件中的特殊字符(ഀ;)
当我打开记事本时,我有一个文件看起来像这样++Unix 如何处理文件中的特殊字符(ഀ;),unix,bpel,Unix,Bpel,当我打开记事本时,我有一个文件看起来像这样++ A|B|C|D|Eഀ 31|HB|39|Ph|49ഀ 32|FB|38|Ph|59ഀ 当我试图从WinScp打开它时,它看起来如下所示 ÿþA|B|C|D|E 31|HB|39|Ph|49 32|FB|38|Ph|59 我想在BPEL文件适配器中读取此文件。但是我不能读它,因为{eol}不合适。而且我已经试过了ഀ 作为最后一行,但没
A|B|C|D|Eഀ
31|HB|39|Ph|49ഀ
32|FB|38|Ph|59ഀ
当我试图从WinScp打开它时,它看起来如下所示
ÿþA|B|C|D|E
31|HB|39|Ph|49
32|FB|38|Ph|59
我想在BPEL文件适配器中读取此文件。但是我不能读它,因为{eol}不合适。而且我已经试过了ഀ 作为最后一行,但没有运气
PFA
<>
提前感谢,
阿披舍克当你在这个文件上运行od-c时(见上面的注释),你发现:
0000000 377 376 A \0 | \0 B \0 | \0 C \0 | \0 D \0
0000020 | \0 E \0 \r \n \0 \r \n \0 3 \0 1 \0 | \0
0000040 H \0 B \0 | \0 3 \0 9 \0 | \0 P \0 h \0
0000060 | \0 4 \0 9 \0 \r \n \0 \r \n \0 3 \0 2 \0
0000100 | \0 F \0 B \0 | \0 3 \0 8 \0 | \0 P \0
0000120 h \0 | \0 5 \0 9 \0 \r \n \0 \r \n \0
0000136
让我们从头开始
你注意到前两个字节了吗?八进制377和376。别名0xFF 0xFE十六进制。这就是所谓的字节顺序标记(BOM)。它用于向必须读取文件的应用程序“传递”信息(编码和结束)
现在,如果BOM为0xFF 0xFE,则表示该文件包含编码为UTF-16的Unicode字符。确切地说,它是一个小的Endian UTF-16编码文件(UTF-16LE)
由于您的文件编码为UTF-16LE。。。每个字符都需要两个字节:
- 第一个字符(拉丁文大写字母A)由“A\0”表示
- 第二个字符是“|\0”
- 第三个字符是“B\0”
- 等等
- 回车应该用0x0D 0x00表示(在od-c中为\r\0)
- 0x0A 0x00(\n\0在od-c中)的新行
您可以尝试使用iconv和/或sed来修复它。在该文件上运行od-c时(请参见上面的注释),您会发现:
0000000 377 376 A \0 | \0 B \0 | \0 C \0 | \0 D \0
0000020 | \0 E \0 \r \n \0 \r \n \0 3 \0 1 \0 | \0
0000040 H \0 B \0 | \0 3 \0 9 \0 | \0 P \0 h \0
0000060 | \0 4 \0 9 \0 \r \n \0 \r \n \0 3 \0 2 \0
0000100 | \0 F \0 B \0 | \0 3 \0 8 \0 | \0 P \0
0000120 h \0 | \0 5 \0 9 \0 \r \n \0 \r \n \0
0000136
让我们从头开始
你注意到前两个字节了吗?八进制377和376。别名0xFF 0xFE十六进制。这就是所谓的字节顺序标记(BOM)。它用于向必须读取文件的应用程序“传递”信息(编码和结束)
现在,如果BOM为0xFF 0xFE,则表示该文件包含编码为UTF-16的Unicode字符。确切地说,它是一个小的Endian UTF-16编码文件(UTF-16LE)
由于您的文件编码为UTF-16LE。。。每个字符都需要两个字节:
- 第一个字符(拉丁文大写字母A)由“A\0”表示
- 第二个字符是“|\0”
- 第三个字符是“B\0”
- 等等
- 回车应该用0x0D 0x00表示(在od-c中为\r\0)
- 0x0A 0x00(\n\0在od-c中)的新行
您可以尝试使用iconv和/或sed来修复它。您必须了解文件的确切内容。我建议您在Unix上运行以下命令:
od-c您的_文件
以获得八进制转储。@mauro。。你好我已经检查了这个命令,并且理解了这个问题。问题在于在unix中将LF转换为CRLF。你能帮我做一下必要的命令吗?非常感谢你的帮助help@BapuAbhi:我不相信你在谷歌上没有找到任何关于LFCRLF转换搜索的信息。@MatteoItalia尝试了很多链接。。但是还没有成功。。直到我开始工作。你介意分享一下od-c
的输出吗?我怀疑CR和LF都会导致你们在输出中看到的那个盒子。无论如何您可以使用以下sed命令删除每行末尾的额外CR:sed的/\x0D$/'old\u file>new\u file
您必须了解文件确切包含的内容。我建议您在Unix上运行以下命令:od-c您的_文件
以获得八进制转储。@mauro。。你好我已经检查了这个命令,并且理解了这个问题。问题在于在unix中将LF转换为CRLF。你能帮我做一下必要的命令吗?非常感谢你的帮助help@BapuAbhi:我不相信你在谷歌上没有找到任何关于LFCRLF转换搜索的信息。@MatteoItalia尝试了很多链接。。但是还没有成功。。直到我开始工作。你介意分享一下od-c
的输出吗?我怀疑CR和LF都会导致你们在输出中看到的那个盒子。无论如何您可以使用以下sed命令来删除每行末尾的额外CR:sed的/\x0D$/'旧\u文件>新\u文件
@Mauro…感谢您的回复。但我得到的是pgp加密格式的文件。我已解密该文件并共享该文件的内容。我知道问题在LF。它应该是CRLF,这样我的BPEL文件适配器就可以读取和处理。。。当我在记事本++中手动复制内容时,CRLF将显示在文件中。我已使用以下命令删除\0和|\0 CMD->u2dos()(set-f;IFS='';printf'%s\r\n'$(cat“$1”))u2dos oldfile.txt>newfile.txt