我正在寻找关于如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且可能在值中有逗号,如公司名称。

我们正在考虑的一些想法是:带引号的标识符(value "," values ","等等)或使用|代替逗号。最大的问题是我们必须让它变得简单,否则客户就不会这么做。


当前回答

您可以在字段周围加上双引号。我不喜欢这种方法,因为它增加了另一个特殊字符(双引号)。只需定义一个转义字符(通常是反斜杠),并在需要转义的地方使用它:

data,more data,more data\, even,yet more

您不必尝试匹配引号,而且需要解析的异常也更少。这也简化了您的代码。

其他回答

您可以在字段周围加上双引号。我不喜欢这种方法,因为它增加了另一个特殊字符(双引号)。只需定义一个转义字符(通常是反斜杠),并在需要转义的地方使用它:

data,more data,more data\, even,yet more

您不必尝试匹配引号,而且需要解析的异常也更少。这也简化了您的代码。

使用制表符(\t)分隔字段。

感谢这篇文章中的其他人。

我使用这里的信息在JavaScript中创建了一个函数,该函数将为一个对象数组获取csv输出,该对象数组的属性值可能包含逗号。

like

rowsArray = [{obj1prop1: "foo", obj1prop2: "bar,baz"}, {obj2prop1: "qux", obj2prop2: "quux,corge,thud"}]

into

csvRowsArray = [{obj1prop1: "foo", obj1prop2: "\"bar,baz\""}, {...} ] 

要在csv中的值中使用逗号,值需要用双引号括起来。为了在json对象的值中有双引号,它们只需要转义,即,“\”,反斜杠双引号。这里的转义是通过在模板文本中添加子元素并包括必要的引号' "${row[key]}" '来实现的。引号在放入对象时被转义。

这是我的函数:

const calculateTheCSVExport = (props) => {
  if (props.rows === undefined) return;

  let jsonRowsArray = props.rows;
  // console.log(jsonRowsArray);

  let csvRowsArrayNoCommasInObjectValues = [];
  let csvCurrRowObject = {}

  jsonRowsArray.forEach(row => {
    Object.keys(row).forEach(key => {
      // console.log(key, row[key])
      if (row[key].indexOf(',') > -1) {
        csvCurrRowObject = {...csvCurrRowObject, [key]: `"${row[key]}"`} // enclose value in escaped double quotes in JSON in order to export commas to csv correctly. see more: https://stackoverflow.com/questions/769621/dealing-with-commas-in-a-csv-file
      } else {
        csvCurrRowObject = {...csvCurrRowObject, [key]: row[key]}
      }
    });

    csvRowsArrayNoCommasInObjectValues.push(csvCurrRowObject);
    csvCurrRowObject = {};
  })

  // console.log(csvRowsArrayNoCommasInObjectValues)
  return csvRowsArrayNoCommasInObjectValues;
}

这里有一个简单的变通方法:

您可以使用希腊小写数字符号(U+0375)

看上去就像这样

使用这种方法也可以节省很多资源…

在字符串周围加双引号。这就是Excel所做的。

阿拉伊莱,

将双引号转义为2 双引号。如。 “test1”、“foo”“酒吧”,“test2”