【问题标题】:ASP Readline non-standard Line EndingsASP Readline 非标准行尾
【发布时间】:2009-12-07 22:36:45
【问题描述】:

我正在使用文件系统对象的 ASP Classic ReadLine() 函数。
一切都很好,直到有人在 Mac 上的 TextEdit 上制作了他们的导入文件。

行尾不一样,ReadLine() 读取整个文件,而不是一次读取 1 行。

有没有标准的处理方法?某种页面指令,或文件系统对象上的设置?

我想我可以读入整个文件,然后拆分vbLF,然后对于每个项目,将vbCR 替换为“”,然后一次处理一行,但这似乎有点笨拙.

我已经到处寻找这个问题的解决方案,但解决方案都是“不要以 Mac[sic] 行结尾保存文件”。

谁有更好的方法来解决这个问题?

【问题讨论】:

    标签: asp-classic readline line-endings


    【解决方案1】:

    没有办法改变ReadLine 的行为,它只会将CRLF 识别为行终止符。因此,唯一简单的解决方案就是您已经描述的解决方案。

    编辑

    实际上,在 ASP 服务器上应该有另一个开箱即用的库,它可能会提供一些帮助。那就是 ADODB 库。

    ADODB.Stream 对象有一个LineSeparator 属性,可以分配 10 或 13 以覆盖它通常使用的默认 CRLF。该文档不完整,因为它没有描述如何将其与ReadText 一起使用。您可以通过传递 -2 作为其参数来获取 ReadText 方法以从流中返回下一行。

    看看这个例子:-

    Dim sLine
    Dim oStreamIn : Set oStreamIn = CreateObject("ADODB.Stream")
    
    oStreamIn.Type = 2 '' # Text
    oStreamIn.Open 
    oStreamIn.CharSet = "Windows-1252"
    oStreamIn.LoadFromFile "C:\temp\test.txt"
    oStreamIn.LineSeparator = 10 '' # Linefeed
    
    Do Until oStreamIn.EOS
      sLine = oStreamIn.ReadText(-2)
      '' # Do stuff with sLine
    Loop
    
    oStreamIn.Close
    

    请注意,默认情况下 CharSet 是 unicode,因此如果文件不是 Unicode,您需要分配文件使用的正确 CharSet。我使用“Unicode”这个词的意思是文档实际上意味着 UTF-16。这里的一个优点是 ADODB Stream 可以处理 UTF-8,这与 Scripting 库不同。

    顺便说一句,我认为 MAC 使用 CR 作为行尾?它使用 LF 的 Unix 文件格式不是吗?

    【讨论】:

    • 你可能对 Mac 上的 CR 和 Unix 上的 LF 完全不以为然。老实说,我正在通过 2 个远程桌面会话调试这个东西,剪贴板没有复制过来。我只知道存在差异,我很幸运地在调试会话的早期询问了哪种机器创建了该文件。安东尼,我只是想再次感谢您抽出宝贵的时间,并认为您已经回答了。我真的很感激。
    • Mac OS X 是一个 Unix。使用 CR 的是 Classic Mac OS(尽管我认为有些应用程序仍然如此)。
    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多