【发布时间】: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