【问题标题】:Prevent Merb from stripping carriage returns?防止 Merb 剥离回车?
【发布时间】:2014-05-27 15:06:49
【问题描述】:

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

我正在为网络服务的用户构建一个可下载的动态文本文件,以便他们可以导出数据。我正在使用标准的 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,你是我唯一的希望!

【问题讨论】:

  • 我已经很久没有生成 txt 文件了(老实说,最后一次在 php 中),但在 EOL 的简单 "\r\n" 总是足以驯服它。

标签: ruby-on-rails ruby unix merb


【解决方案1】:

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

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

不完美,但现在可以了。

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多