Delphi 和 Web 应用程序之间的行尾问题
Posted
技术标签:
【中文标题】Delphi 和 Web 应用程序之间的行尾问题【英文标题】:Problems with line endings between Delphi and Web application 【发布时间】:2019-03-03 05:12:25 【问题描述】:我们正在将一些 Delphi 应用程序迁移到基于 Web 的应用程序,在此期间,一些应用程序同时在这两种应用程序中运行。
我们有一种情况,Web 应用程序可以正确读取 Delphi 应用程序编写的换行符,但 Delphi 应用程序在将文本保存在 Web 应用程序中时忽略了换行符。
据我所知,Delphi 应用程序在任何行的末尾都写了#$D#$A
。在数据库表中,这些被视为CR LF
。
当 Web 应用程序保存文本的保存块时,Delphi 读取时换行符变为#$A
。在数据库中,这些似乎仍然是CR LF
想法?
【问题讨论】:
之前的 XML 相关评论可能不适用。但是这个answer 解决了 html 规范。 #$A(或#10,^J)是 Linux 和其他操作系统中使用的行尾代码。你将不得不转换。看我的小工具eolconv的代码:github.com/rvelthuis/CommandLineTools/blob/master/eolconv.dpr. 我不知道在这种情况下“数据库”是什么,但我遇到了 Oracle 和 PL/SQL 开发人员的问题,其中数据库中的换行符实际上是 unix 换行符( LF、$A、\n,无论您喜欢哪种表示形式),但数据库工具将其转换为运行它的客户端(Windows),因此将它们显示为 CR LF。 Delphi 没有做这种神奇的翻译,实际上只是把它们读成了 LF。无论如何,您要么必须一致地存储它,要么在从数据库中读回它时对其进行转换。在 Delphi 中,您可以使用函数AdjustLineBreaks
进行转换。
本例中的数据库是 mysql。我假设(可能不正确)作为原始数据显示 CR/LF,Delphi 和 Web 应用程序都在向其写入#13#10。很可能是客户妨碍了这里。
@GolezTrol 这确实是问题所在。您能否将您的评论切换为答案,以便我接受。我也不知道AdjustLineBreaks
【参考方案1】:
您说“数据库显示”,但它实际上可能是您用来检查此数据库的工具。我遇到了 Oracle 和 PL/SQL 开发人员的问题,其中数据库中的换行符实际上是 unix 换行符(只是换行符、LF、$A、\n,无论您喜欢哪种表示形式),但是数据库工具将其转换为它正在运行的客户端(Windows),因此将它们显示为 CR LF。您的工具也可以这样做。
Delphi 并没有做这种神奇的翻译,实际上只是把它们读成 LF。
因此,要获得特定类型的换行符,您要么必须一致地存储值,要么在从数据库中读回值时即时转换它。
在 Delphi 中,您可以使用函数 AdjustLineBreaks
进行该转换,无论是在保存之前还是在获取之后(或两者)。
【讨论】:
为了完成,值得注意的是,Windows 上的 MySQL Workbench 似乎将 Linux 换行符转换为CR/LF
对。这让我相信问题不是行尾。以上是关于Delphi 和 Web 应用程序之间的行尾问题的主要内容,如果未能解决你的问题,请参考以下文章