0

我在这个主题上尝试的每一个谷歌搜索都提出了与我的问题相反的问题!

我正在为 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,你是我唯一的希望!

4

1 回答 1

0

所以我最终得出的解决方案有点破解,欢迎提出更好的建议。

我没有试图找到删除 CR 的位置,而是停止强制下载带有标题的文本文件(如上),而是允许浏览器以其他方式呈现文本。IE和其他浏览器都可以原生处理行尾,无需任何干扰,用户可以复制文本文件或“另存为”,它会在记事本中正确显示。

不完美,但现在可以了。

于 2014-05-28T16:42:39.253 回答