【发布时间】:2020-12-26 06:06:07
【问题描述】:
如何在 SAP 中读取具有混合行尾(Windows 和 Unix)和 UTF-16 Big Endian 文件的 ASCII 文件?
背景:我们的 ABAP 应用程序必须读取我们的一些配置文件。其中大多数是 ASCII 文件(普通文本文件),一种是 Unicode Big Endian。到目前为止,文件是使用 ASCII 模式读取的,在我们的测试过程中一切正常。
但是,以下情况发生在客户身上:配置文件位于 Linux 终端上,因此它具有 Unix 行结尾。人们通过 FTP 或类似方式读取配置文件并将其传输到 Windows 机器。在 Windows 机器上,它们会调整一些设置。根据编辑器的不同,我们的客户现在有混合行结尾。
在 ABAP 中以 ASCII 模式读取文件时,这些混合行结尾会导致问题。文件被读取到行尾发生变化的点,但不是整个文件。
我建议以 BINARY 模式读取文件,删除所有 CR,然后将所有剩余的 LF 替换为 CR LF。这很好——除了 UTF-16 BE 文件,这种方法会导致混乱。所以整个事情都被还原了。
我不是 ABAP 开发人员,我只需要对此进行测试。以我在其他编程语言方面的背景,我必须假设有一个解决方案,我倾向于拒绝这个错误的“无法修复”解决方案。
【问题讨论】:
-
您已经为非 UTF-16 BE 文件提供了最有效的解决方案。您不能以二进制格式读取文件,检查文件开头的 UTF BOM 吗?一旦知道编码,就可以相应地处理文件。
-
恕我直言,这不值得一个完整的答案,但是 - 对于有能力的 ABAP 开发人员来说,这绝对是可能的。但是,我不知道任何现有的和可重用的 auto-detect-anything-that-might-come-my-way-including-EBCDIC 类,所以它是你自己的 - 再次......
-
这不是 ABAP 问题。这甚至不是编程问题。只需确保您的 FTP 服务器配置为在以 ASCII 模式传输文件时自动更改结尾。无论如何,这正是开发 FTP 中的 ASCII 模式的原因。在 Windows 中配置良好的 FTP 服务器上,例如以 ASCII 模式从 Unix 客户端传输文本文件应该自动将 LF 更改为 CRLF,反之亦然。
-
这是question 我前段时间在ServerFault 上问过。这可能会有所帮助。我正在使用的服务器在 FreeBSD 系统上,结果证明默认情况下禁用了转换。
-
@Jagger - 从技术上讲你是对的,但在某些情况下,在 ABAP 方面修复它比击败运营团队修复他们的基础架构更容易......
标签: encoding ftp abap line-endings