我正试图在NetSuite中生成一个包含30,000多个项目的Google购物Feed,该系统运行称为Suitescript 2.0的服务器端JavaScript。从本质上讲,它只是带有更多限制的JavaScript。我一直负责将此产品Feed作为CSV输出。将包含逗号和双引号的字符串写入CSV
问题是这些项目的产品说明包含变量数量的逗号,双引号,单引号和HTML。起初,它只是使我的问题的逗号,所以一些研究之后,我包我在双引号输出字符串:
//This function isn't terribly important, but is referenced below
function sanitizeString (desc) {
var itemDesc;
if (desc) {
itemDesc = desc.replace(/(\r\n|\n|\r|\s+|\t| )/gm,' ');
itemDesc = itemDesc.replace(/,/g, '\,');
itemDesc = itemDesc.replace(/"/g, '\"');
itemDesc = itemDesc.replace(/'/g, '\'');
itemDesc = itemDesc.replace(/ +(?=)/g,'');
} else {
itemDesc = '';
}
return itemDesc;
}
var row = '';
for (var i = 0; i < columns.length; i++) {
var col = columns[i];
row += '"' + sanitizeString(val[col]) + '"';
if (i != columns.length - 1) {
row += ',';
}
}
newFeed.appendLine({value: row});
然而,似乎这些双引号与双奇怪的交互即使我的sanitizeString()函数应该转义它们,字符串内的引号也会引起一些奇怪的格式化。任何时候描述都包含双引号,下一行不会得到它自己的行。它被附加到最后一列。
因此,很自然,我躲过了外部报价是这样的:
row += '\"' + sanitizeString(val[col]) + '\"';
这样做,使事情完全失控,很多项目没有得到被推到新的生产线,我最多出的数我被允许的专栏,因为它只是继续前进。
其他自然解决办法是去编辑产品描述中,但我并不十分急于做的30,000项...
有谁知道可能会在这里吗?我觉得有一些很简单的东西可以忽略...
如果你避开功能应该反斜杠添加到输出,你需要逃避反斜杠在字符串中函数中的文字,即“\\,”而不是“\ \”,或者是包含单引号的文字,或者是'''''或者''\\'“'。 – nnnnnn
不,它不应该添加反斜杠。这只是为了逃避他们的最后一个字符串。添加溢出的反斜杠会使事情再次失灵,并且不会添加新行,但会将其附加到包含引号的行的末尾...... – B1gJ4k3
什么是“为了最终字符串而逃脱它们”对您意味着什么?这是不是说最终的字符串会添加反斜杠?例如,如果特定*字段*的输入是“你好,再见”,那么输出应该是“你好\,再见”,不是吗?对于CSV,假设你正在删除换行符并将每个字段放在双引号中,我认为只有双引号需要被转义 - 虽然由于某种原因,您似乎将整个*行*放在双引号中,这对CSV来说不正常。请[编辑]您的问题,以显示一个示例两行输入和相应的期望输出。 – nnnnnn