我正在使用文件系统对象的 ASP 经典 ReadLine()
函数。
在有人在 Mac 上使用 TextEdit 制作导入文件之前,一切都运行良好。
行尾不一样,ReadLine()
读取整个文件,而不是一次只读取 1 行。
是否有处理此问题的标准方法?某种页面指令,或文件系统对象上的设置?
我想我可以读入整个文件,并在 vbLF
上拆分,然后对于每个项目,将 vbCR
替换为“”,然后处理行,一个一次,但这似乎有点笨拙。
我已经到处搜索这个问题的解决方案,但解决方案都是“不要使用 Mac[sic] 行结尾保存文件。”
谁有更好的方法来处理这个问题?
最佳答案
没有办法改变 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 文件格式吗?
关于asp-classic - ASP Readline 非标准行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863400/