我在这个主题上尝试过的每一次Google搜索都出现了与我的问题相反的问题!
我正在为Web服务的用户构建一个动态可下载文本文件,以便他们可以导出他们的数据。我正在使用标准的MVC行为来动态编写文本文件,设置标题以强制在控制器中下载文件:
headers["Content-Disposition"] = "attachment; filename=#{filename}.txt"
我遇到了Windows最终用户正在下载文件并使用记事本打开文件的问题 - 所有行结尾都被删除了,这只是一个大问题。
我已经以尽可能多的方式重新创建了我的视图文件,将其保存为不同的编码,在Windows机器上重新创建它并三重检查它在每行的末尾都有CRLF。
cat -v app/views/export/export.text.erb
显示了这一点:
<%= session.user.username %>'s Data^M
<%= @posts.count %> Posts^M
^M
<% @posts.each do |post| -%>^M
Prompt: <%= post.prompt.title %>^M
Prompt subtitle: <%= post.prompt.subtitle %>^M
^M
Title: <%= post.title %>^M
Subtitle: <%= post.subtitle %>^M
Created: <%= post.created_at.to_s %>^M
Updated: <%= post.updated_at.to_s %>^M
Type: <%= post.type %>^M
Content:^M
<%= JSON.pretty_generate(post.fields) %>^M
^M
===^M
^M
<% end %>^M
我不能要求Windows用户使用其他文本阅读器。其他人之前已经解决了这个问题。此问题的另一方面:我在此服务器上没有sudo权限。我可能会要求服务器管理员安装一些东西,但我想知道它会在我之前工作。
帮我Stack Overflow,你是我唯一的希望!
答案 0 :(得分:0)
所以我最终得到的解决方案是一个黑客攻击,欢迎更好的建议。
我没有试图找到CR被剥离的位置,而是停止强制下载带有标题的文本文件(如上所述),而是允许浏览器以其他方式呈现文本。 IE和其他浏览器都可以原生地处理行结尾而不需要任何干扰,并且用户可以复制文本文件或&#34;另存为&#34;它将在记事本中正确显示。
不完美,但它现在要做。