【问题标题】:Preserving newline characters in data:text URI在 data:text URI 中保留换行符
【发布时间】:2013-07-08 17:49:12
【问题描述】:

我的扩展中有一个按钮触发以下代码:

chrome.tabs.create({url: 'data:text;base64,'+btoa(data), active:false});

正如我所料,这会触发我的字符串(数据)的下载。不幸的是,它似乎去掉了换行符。

我尝试过其他编码方法,包括 utf-8 和 encodeUri() 函数。我还尝试将 mimetype 切换为 data:text/plain,但这只是在新选项卡中打开(使用正确的换行符)而不是下载。

有没有办法对我的文本进行编码以便保留换行符?如果没有,是否有其他方法可以在浏览器中触发文件下载?

编辑

我发现换行符确实出现在某些文本编辑器中。以前,我使用的是记事本,它无法识别 chrome 中的换行符,但我的其他文本编辑器 (notepad++) 似乎可以识别它们

【问题讨论】:

    标签: google-chrome-extension text-files data-uri


    【解决方案1】:

    我推荐的解决方案是不使用记事本,因为它不能识别非 Windows 行格式。如果您仍然希望能够在输出中使用记事本,replace 所有换行符 (0x0A) 和回车+换行符对 (0x0D 0x0A)。

    chrome.tabs.create({
        url: 'data:text;base64,' + btoa(data.replace(/\n/g, '\r\n')),
        active: false
    });
    

    【讨论】:

    • 不敢相信我忘记了\r。谢谢!
    【解决方案2】:

    对于所有试图在没有 base64 加密的数据 URI 中保留换行符的人: 这是不可能的,你必须使用base64编码。

    【讨论】:

    • 这个答案不正确,通过 URL 编码的 URL 可以有没有 base64 编码的换行符。例如:data:text/html,<pre>a%0A%0Db</pre>
    • 另外,base64 是编码,不是加密。
    • 其实这是正确的答案。问题是关于文本/纯文本,而不是文本/html。 text/plain 不支持换行符,您必须对其进行 base64 编码。
    • @RobW 应该是%0D%0A。这似乎行得通。
    猜你喜欢
    • 2019-07-27
    • 2013-07-27
    • 2013-11-10
    • 2015-08-16
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多