CSV文件中的 字符不被视为换行符
characters in CSV file not treated as line breaks
为这个愚蠢的问题道歉…我正在尝试创建一个CSV文件,看起来像这样:
Header1,Header2,Header3,
"Value1","Value2","Value3"
相反,我得到一个CSV文件,看起来像这样:Header1,Header2,Header3,'r'n"Value1","Value2","Value3"
我如何让我的CRLF字符在输出中实际产生换行?
我正在做的是使一个ajax调用WebMethod,从存储过程中生成一个数据表,然后该数据表被解析为CSV,如下所示:
if (!createHeaders)//I deal with the headers elsewhere in the code
{
foreach(DataColumn col in table.Columns){
result += col.ColumnName + ",";
};
result += Environment.NewLine;
}
for (int rowNum = 0; rowNum < table.Rows.Count; rowNum++)
{
for (int colNum = 0; colNum < table.Columns.Count; colNum++)
{
result += "'"" + (table.Rows[rowNum][colNum]).ToString();
result += "'",";
};
result += Environment.NewLine;
};
return result;
}
然后将该字符串传递回ajax查询的成功函数,在那里进行更多的转换…
function getExportFile(sType) {
var alertType = null
$.ajax({
type: "POST",
url: "./Services/DataLookups.asmx/getExcelExport",
data: JSON.stringify({ sType: sType }),
processData: false,
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function (response) {
response = replaceAll(response,"'''"", "'"")
response = response.replace("{'"d'":'"", "")
response = response.replace("'"}", "")
download(sType + ".csv",response)
}
});
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click()
document.body.removeChild(element);
}
function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|'[']'/''])/g, "''$1");
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
在将字符串传递回javascript之前的调试中,如果我只是键入?response,我将得到不正确的,全部在一行上的响应。但是,当我输入? response时,nq可以识别换行符,并且一切看起来都是正常的。
而且,我确信我在这里做错了很多/愚蠢的事情。我也很感激你指出这些例子。
您的报头应该将data:Application/octet-stream,
作为mime类型而不是data:text/plain;charset=utf-8,
,原因是根据HTTP规范,当内容类型未知时,收件人应将其视为类型应用程序/octet-stream。
由于您已经在使用encodeURIComponent()
,这似乎是剩下的唯一问题。
@AryKay的回答肯定有帮助,但还有一个额外的问题。Ajax调用返回的字符串将'r'n
转义为文字。运行
Response = response.replace (/''r''n/g, "'r'n")
在通过encodeURIComponent
之前,它像一个魅力一样运行。
- 如何在映射数组中添加换行符
- JQuery:向多个匹配结果添加换行符的最简单方法
- 在文本区域中使用jQuery.text()保持换行符
- javascript替换换行符和特殊字符
- 换行符拆分返回“”;未定义”;
- 尊重“; 〃;从HTML显示中的API响应返回的换行符(和特殊字符)
- javascript是否有一个选项可以使句点与任何字符匹配,包括换行符
- 如何在指定字符后添加换行符
- 用换行符替换字符
- 删除或重复的非单词字符,如HTML文本区域中的换行符,这些字符会导致modsecurity中的错误
- 显示文本中的x个字符,当单击href时,用换行符显示其余字符
- 如何在每80个字符后插入换行符
- 特殊字符前的换行符
- 计算文本区域中的字符和换行符
- JSON:处理textArea中的换行符(和其他无效的JSON字符)
- 如何从PHP字符串中删除所有换行符和转义字符?
- Angular.js textarea字符计数,排除空格和换行符计数
- CSV文件中的 字符不被视为换行符
- 如何在javascript中每三个字符添加一个换行符
- 找到一个字符并插入换行符