0

我正在解析具有两列的.csv 文件。我正在尝试使用 csv 文件中的 boost tokenizer 解析行,其中行中的一个字段是双引号(例如:1,“test”)。在标记器之后,我在 tok (1,test) 中得到没有双引号的字段。

typedef tokenizer< escaped_list_separator<char>> Tokenizer;
if (getline(inputFile, line))
{
    Tokenizer tok(line);        
    vector< string > vec;
    vec.assign(tok.begin(), tok.end());

    //Here *(vec.begin() + 1) is printing string- test , without double quote
}

有没有办法用双引号获得第二个字段?

4

1 回答 1

0

引号是演示的东西。解析/标记数据后,您希望返回未转义的数据。

引用/转义表示仅用于保护传输中数据中的特殊字符(以防止它们干扰您的协议¹)。

一旦你读回它,它就不再在传输中,并且“保留”转义或引号(或您的协议附带的任何其他人工制品¹)将是一个错误,实际上是错误的常见来源,而不是很少的安全性漏洞

样品

  • CSVa"a"对应于值a
  • 同样"\""对应"
  • "\\\""对应于\"
  • "\"不完整(引用的构造未关闭)

重要的是你的价值观在不丢失信息的情况下往返。因此,解析"a"为值"a"会产生概念错误,将其转换回引号转义格式会突然看起来像"\"a\"",这是完全不同的事情!


¹表示格式或传输协议

² 最常见的代码注入

当应用程序向解释器发送不受信任的数据时,就会出现代码注入漏洞(注入缺陷)。注入缺陷最常出现在 SQL、LDAP、XPath 或 NoSQL 查询中;操作系统命令;XML 解析器、SMTP 标头、程序参数等。注入缺陷在检查源代码时往往比通过测试更容易发现。[1] 扫描仪和模糊器可以帮助发现注入缺陷。 [2]

于 2018-02-26T21:33:53.570 回答