【问题标题】:Blob from UTF-16来自 UTF-16 的 Blob
【发布时间】:2021-06-11 00:11:48
【问题描述】:

我正在尝试获取 UTF-16 的 blob(我认为)。这是代码。我没有包含完整的字符串,因为它太长了。

  const creatBlobUrl = (str) => {
  console.log(str) 
 //?PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\b$\u0000\u0000\u00016\b\u0006\u0000\u0000\u0000???\u0000\u0000\fliCCPICC Profile\u0000\u0000H??W\u0007XS?\u0016?[????\u0002?H\t?\tҫ?\u0010Z\u0004\u0001????\u0004\u0012J?\tAņ????E\u0014+?*??Z\u0000YT?^\u0016??\u0017\u000b*+?bAQTބ\u0004t?W?w?o?̙??;s?\u001d\u00004{?\u0012I.?\u0005@?8_\u001a\u001f\u0011?\u001c???$u\u0000\u0002 \u0001\n0\u0006\b?'????\u0001?????&@\u0014?5'\u0005??????\u00052\u001e\u0000?x?3?2^\u001e??\u0000?\u001bx\u0012i>\u0000D??rj?D?? ֕?\u0000!^??YJ?K?3??i?&1?\r?\u0015\u0000Ԩ\\?4\u000b\u0000??P?,?eA\u001e??\u0010???\"1\u0000??!\u000e?\t?|?\u0015?\u000f?˛??\u0015\u0010?A{\t?0\u001e??\u001dg??3???ܬ!??k@?BE2I.w??Y??-y??A\u001f6?Q???xE????s&G)0\u0015?.qFL???\u0010???ʺ\u0003?R???$?=j̓?a?" 
    const blob = new Blob([str], {
      type: 'image/png',
    });

    return URL.createObjectURL(blob);
  };

首先,这甚至是 UTF-16。其次我做错了什么?顺便说一句,我的目标是将此网址传递给锚标记

【问题讨论】:

  • 我尝试对 new Blob([atob(str)]) 做一些事情,但这也没有用。
  • 这能回答你的问题吗? Blob URL with UTF-16LE encoding
  • 不,这在我看来不像 UTF16。它看起来像一个 PNG
  • 它甚至不是PNG,这是将PNG文件的二进制数据读取为UTF-8文本的结果。您已经以无法检索的方式丢失了信息。例如,第一个字节现在是 0x3f (?),而它是 0x89。这是因为这个字节不是 UTF-8 的一部分,它被映射到一个替换字符。你的 png 数据中可能会出现很多这样的字节:它已经损坏了。您需要后退几步,无论什么创建了该字符串,并使其直接返回 Blob 而不是字符串。在不知道是什么生成了该字符串的情况下,我们无能为力。
  • 你在哪里看到字符串中的 0x3f?那等于 u0001a 吗?

标签: javascript blob


【解决方案1】:

想通了。 @Kaiido 你是对的。我实际上是通过 http 丢失数据。在通过 http 发送数据之前,我必须在后端将数据编码为 base64,然后在前端使用以下内容对其进行解码: https://stackoverflow.com/a/35713609/11477406

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2012-08-18
  • 2021-01-06
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2018-05-18
  • 2012-03-13
相关资源
最近更新 更多