AS/400数据库中的回车换行字符是什么?

4

我有一个客户在运行 AS/400。我需要通过 FTP 将一个平面文件发送给他们。他们告诉我他们的回车字符是 RN。我不认识这个,找不到任何关于它的信息,而他们的技术人员是 Nick Burns,所以他拒绝给我任何指导。AS/400 是否有标准的回车代码?

我应该提到,我有一个 C# .NET 2.0 控制台应用程序。


lol @ Nick Burns. "Moooove!", "Oh, by the way... You're welcome!" 但更严肃地说……这听起来更像是一个ServerFault的问题。迁移? - Paul Sasik
1
你不能使用二进制模式将AS/400上的“正确”文件示例通过ftp传输到Unix系统,然后在该文件上运行od -x命令,解码十六进制以了解行应该如何结束吗? - Heath Hunnicutt
@Paul:为什么这么讨厌OS/400呢?如果他在问Windows、Max或Linux,没有人会想到把它移到serverfault上。RPG和CL程序员也是程序员,你知道的 :) - BlueRaja - Danny Pflughoeft
你是在谈论使用换行符作为记录分隔符,还是指数据中实际包含的换行符(即嵌入在单个字段中)? - John Y
@BlueRaja:没有恶意。在提到控制台应用程序之前,这似乎纯粹是一个特定于操作系统的问题,更适合放在ServerFault上讨论。 - Paul Sasik
4个回答

11

AS/400使用EBCDIC字符集,而不是DOS或Unix ASCII字符集。在Unix中,文本文件行通常以ASCII '\n'结尾,而在DOS中,行通常以ASCII '\r\n'结尾。

当您进行FTP时,如果使用EBCDIC传输类型而不是binASCII,ftp应该为您转换这些字符。

EBCDIC回车符为0x0D,与ASCII相同。
EBCDIC换行符为0x25,不像ASCII 0x0A。

AS/400 EBCDIC换行符为0x15-NEL("NExt Line")。

有关行终止的更多信息,请参见此维基百科文章。


2
尽管维基百科的文章提到了NEL是AS/400中常用的换行符,但我并不认同。我们在AS/400与其他机器通信时一直使用CR和LF字符。 - John Y
我应该补充说明的是,除了特别用于最终目的地为外部机器的数据而不是用于AS/400本身的数据之外,我们从未在字段内存储换行符。当然,在这些情况下,我们会使用LF或CRLF,而不是NEL。 - John Y
你使用的 LF 是 0x25 还是 0x0A? - Heath Hunnicutt
如果其余数据是EBCDIC格式的,并且我依赖于单独的转换步骤(正如您所说,FTP应该会这样做),那么我将其保留为0x25。但是,有时我会在AS/400上准备ASCII数据,这种情况下它将是0x0A。 - John Y

2
也许他们的意思是\r\n?

0

\r\n

CRLF

回车符后跟换行符


大家都要小心Nick Burns。 - Midhat
但是,我只需将其作为字符串添加到行末吗? - donde

0

我之前是在本地测试时这样做的,但是我认为如果我对FTP文件这样做,它会将.NET回车符发送到AS/400上并且会失败,因为它们是不同的“环境”。 - donde
没有“.Net回车符”——.Net使用所在系统的回车符。至于FTP:如果您使用正确的传输类型(如Heath所提到的EBCDIC),它将在不同系统之间为您转换回车符。 - BlueRaja - Danny Pflughoeft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接