Encoding SAP能否检测编码和行尾?

Encoding SAP能否检测编码和行尾?,encoding,ftp,abap,line-endings,Encoding,Ftp,Abap,Line Endings,如何在SAP中读取混合行结尾(Windows和Unix)的ASCII文件和UTF-16大端文件 背景:我们的ABAP应用程序必须读取一些配置文件。其中大多数是ASCII文件(普通文本文件),一个是Unicode Big-Endian。到目前为止,文件是使用ASCII模式读取的,在我们的测试中一切正常 但是,在客户中发生了以下情况:配置文件位于Linux终端上,因此它具有Unix行结尾。人们通过FTP或类似方式读取配置文件,并将其传输到Windows计算机。在Windows计算机上,它们会调整一些

如何在SAP中读取混合行结尾(Windows和Unix)的ASCII文件和UTF-16大端文件

背景:我们的ABAP应用程序必须读取一些配置文件。其中大多数是ASCII文件(普通文本文件),一个是Unicode Big-Endian。到目前为止,文件是使用ASCII模式读取的,在我们的测试中一切正常

但是,在客户中发生了以下情况:配置文件位于Linux终端上,因此它具有Unix行结尾。人们通过FTP或类似方式读取配置文件,并将其传输到Windows计算机。在Windows计算机上,它们会调整一些设置。根据编辑器的不同,我们的客户现在有混合的行尾

在ABAP中以ASCII模式读取文件时,这些混合行结尾会导致问题。文件被读取到行尾改变的点,再加上一点,但不是整个文件

我建议以二进制模式读取文件,删除所有的CRs,然后用CRLF替换所有剩余的LF。这很好-除了UTF-16 BE文件,这种方法会导致混乱。所以整件事都被还原了


我不是ABAP开发人员,我只是需要测试一下。鉴于我在其他编程语言方面的背景,我必须假设有一个解决方案,我倾向于拒绝对此错误的“无法修复”解决方案。

您可以使用
CL\u ABAP\u FILE\u UTILITIES=>检查\u BOM
来确定该文件有哪些编码,然后使用class
CL\u ABAP\u CHAR\u UTILITIES
的常量来进一步处理

对于非UTF-16 BE文件,您已经有了一个基本可行的解决方案。你不能读取二进制文件,检查文件开头的UTF BOM吗?一旦您知道了编码,您就可以相应地处理文件了。IMHO这不值得一个完整的答案,但是-对于一个有能力的ABAP开发人员来说,这绝对是可能的。然而,我不知道任何现有的和可重用的自动检测任何东西,可能会来我的方式,包括EBCDIC类,所以它的滚动您自己的-再次…这不是一个ABAP问题。这甚至不是一个编程问题。只需确保FTP服务器配置为在ASCII模式下传输文件时自动更改结尾即可。无论如何,这就是为什么FTP中的ASCII模式被开发出来的原因。例如,在Windows中配置良好的FTP服务器上,以ASCII模式从Unix客户端传输文本文件时,应自动将LF更改为CRLF,反之亦然。这是我不久前在ServerFault上问的问题。这可能会有帮助。我使用的服务器在FreeBSD系统上,结果表明转换在默认情况下被禁用。@Jagger-从技术上说,你是对的,但在某些情况下,在ABAP端修复它比击败运营团队修复其基础结构更容易。。。