【问题标题】:Stop browser from decoding encoded strings when downloading JS object as JSON file将 JS 对象下载为 JSON 文件时停止浏览器解码编码字符串
【发布时间】:2021-03-16 17:10:47
【问题描述】:

我正在尝试将 JS 代码的 sn-p 存储为 JSON,首先将 sn-p 存储在 JS 对象中,然后将该对象下载为 JSON 文件。我可以使用 encodeURI 对 JS 进行精细编码

例如:

encodeURI("var a = 100")

...它给出了一个很好的编码字符串:

"var%20a%20=%20100"

...可以像这样存储在 JS 对象中:

data = {
         "code" : "var%20a%20=%20100"
       }

但如果我将此对象下载为 JSON:

var link = document.createElement("a");
link.download = 'my_file.json';
link.href = "data:json," + JSON.stringify(data);
document.body.appendChild(link);
link.click();

...下载的文件打开时显示解码后的sn-p,导致JSON无效。

我使用 Chrome 作为浏览器。将 JS 对象下载为 JSON 文件时,浏览器会自动解码编码字符串吗?

【问题讨论】:

  • data:json,{\"code\":\"var%20a%20=%20100\"} 也许也尝试编码JSON.stringify(data)?然后当它被浏览器解码时,“代码”仍然被编码。
  • 我也试过了,还是这样。似乎保存的 sn-p 中的分号可能会导致问题。
  • 尝试用 ****** 替换所有星号实例,但问题仍然存在。保存的 JSON 文件中有换行符导致问题。

标签: javascript json object browser


【解决方案1】:

事实证明,我必须同时使用 encodeURIComponentencodeURI 才能将编码保留在下载的 JSON 文件中。

encodeURIComponent(encodeURI( // the code snippet

【讨论】:

  • 为什么会这样?你能分享一个简单的例子来说明它是如何工作的吗?
  • 不确定还有什么要添加的。问题中提供的详细信息非常具体地概述了问题。我的回答为该特定问题带来了解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-10-12
  • 2013-11-12
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多