如何使用Blob在生成的文本文件中添加换行符
解决文本文件下载时换行符不生效的问题
嘿,我一眼就看到问题出在哪了——你在拼接内容的时候用了"/n",但这只是把字符串/n直接写进了文本里,根本不是真正的换行符!JavaScript里表示换行的转义字符应该是反斜杠的\n,不是斜杠的/n。
咱们来改一下代码,不仅能解决换行问题,还能让代码更整洁:
var listPointStringified = "listPoints = "+JSON.stringify(listPoints).replace(/"/g,'') var globalTotalCaisses = "Global_total_caisses = len(listPoints)" var globalNombreCouches = "Global_nombre_couches = "+ JSON.stringify(this.layersOnThePal.length).replace(/"/g,'') var globalCaissesParCouches = "Global_caisses_par_couches = " + JSON.stringify(nombreBoiteParCouches).replace(/"/g,'') var globalIntercalaires = "Global_intercalaires = []" var globalCaisseH = "Global_caisse_h = "+ this.caisse.height var globalOffsetAppDeposeZ = "Global_offset_app_depose_z = Global_caisse_h + 50" // 把所有行内容放进数组,再用换行符拼接,比重复写+ "\n" +更省心 var lines = [ listPointStringified, globalTotalCaisses, globalNombreCouches, globalCaissesParCouches, globalIntercalaires, globalCaisseH, globalOffsetAppDeposeZ ]; var body = lines.join("\n"); // 这里用正确的换行符\n var blob = new Blob([body], {type: 'text/plain', endings:'native'}) var a = document.createElement('a'); a.download = this.name a.href = URL.createObjectURL(blob); a.dataset.downloadurl = ['text/plain', a.download, a.href].join(':'); a.style.display = "none"; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function() { URL.revokeObjectURL(a.href); },1500)
为什么这么改?
- 换行符正确了:
"\n"是JavaScript里的换行转义字符,会被解析成实际的换行,而不是字符串/n。 - 代码更易维护:用数组存储每一行内容,再用
join("\n")拼接,避免了重复写+ "\n" +,以后要加新行也只要往数组里加一项就行。 - 跨平台兼容:你已经加了
endings:'native'参数,Blob会自动根据操作系统把\n转换成对应的换行格式(Windows是\r\n,Mac/Linux是\n),不用额外处理。
这样修改后,下载的文本文件里每个变量声明就会单独占一行啦!
内容的提问来源于stack exchange,提问作者Lorine
相关产品推荐
相关产品推荐

