【问题标题】:Data download from PHP is not split into newlines从 PHP 下载的数据不会分成换行符
【发布时间】:2014-11-07 21:35:17
【问题描述】:

我正在从网络检索数据。数据由每一行分隔。数据看起来像这样

Data1
Data2
Data3

我想提醒网页上找到的每个数据。试过了,

    Dim Lines() As String
    Dim stringSeparators() As String = {vbCrLf}
    Dim Source As String
    Dim wc As New WebClient

    Source = wc.DownloadString("http://www.example.com/data.php")
    Lines = Source.Split(stringSeparators, StringSplitOptions.None)
    For Each s As String In Lines
        MsgBox(s)
    Next

但不幸的是,它会在所有数据后发出警报。我的问题是,如何提醒每个数据?

【问题讨论】:

  • 什么是实际 EOL 字符?它可能“只是”一个换行符或\n,它是除 windows 之外的所有其他主流操作系统的结尾行。
  • @user198989:仅供参考,我已经删除了我的分析器,因为我忽略了 stringSeparators 已经是 String() 而不是单个字符串。

标签: vb.net string newline string-split


【解决方案1】:

vbCrLf,作为defined in Constants,不会匹配单个UNIX-style newline - “换行符” (\n)、LF/LINEFEED, ASCII 10 - 从 PHP 传输的字符。

要处理 Windows 和 UNIX/Linux 行尾序列,请使用:

Dim stringSeparators() As String = {vbLf, vbCrLf}

分隔符提供的顺序无关紧要,详见String.Split中的备注。

虽然上述方法以相当稳健的方式解决了问题,但可能最好使用 exact EOL 格式,尤其是在编写时 - 并根据先验进行选择在既定格式上。在这种情况下,可能只使用vbLf,它适用于给定的 PHP 输出,但会错误地为 Windows 文本文件保留 CR 字符。

在处理系统原生文本文件或 Windows 组件(如控件)时,vbNewLine 通常应优于 vbCrLf:当目标是显式时,vbCrlLf 是合适的,如上所述,并且仅接受/发出协议和约定所要求的特定 ASCII 序列。

【讨论】:

    【解决方案2】:

    在处理空白字符时,我经常对它们运行 String.Asc() 方法,看看它们到底是什么。

    http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.asc(v=vs.110).aspx

    然后,您可以确保在正确的字符上进行拆分。

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2014-09-08
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多