gpt4 book ai didi

javascript - javascript 中字符代码 128 以上的二进制字符串出现问题

转载 作者:行者123 更新时间:2023-12-02 16:54:29 24 4
gpt4 key购买 nike

所以我尝试使用此库在 javascript 中本地创建和保存二进制文件:https://github.com/eligrey/FileSaver.js/

这有点棘手,因为我使用的是 GameMaker studio,并且我与 javascript 交互的方式有点有限,但这是我的设置..除了 github 存储库中的实际 filesaver.js 之外,我的 js 代码是这样的:

var ildablob = new Array();

toArray = function(argument0, argument1)
{
ildablob[argument0] = String.fromCharCode(argument1);
return 1;
}

save = function(argument0)
{
var blob = new Blob(ildablob, {type: "application/octet-stream"});
saveAs(blob, argument0);
return 1;
}

基本上,我的想法是,我首先使用字符代码用各个字节填充一个数组,以创建一个二进制字符串,然后将其制成一个 blob 并保存。这适用于低于 128 的二进制值,但不适用于高于 128 的二进制值,可能是因为某些字符集问题。我该如何解决此问题?

例如,如果我尝试填充从 0-255 递增的数组,这就是生成的二进制文件的内容,正如您所见,在 128 个字节之后,字符突然每个创建两个字节,而不是一个,这就是全部错误:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 5 7 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F C2 80 C2 81 C2 82 C2 83 C2 84 C2 8 5 C2 86 C2 87 C2 88 C2 89 C2 8A C2 8B C2 8C C2 8D C2 8E C2 8F C2 90 C2 91 C2 92 C2 93 C2 94 C2 95 C2 96 C2 97 C2 98 C2 99 C2 9A C2 9B C2 9C C2 9D C2 9E C2 9F C2 A0 C2 A1 C 2 A2 C2 A3 C2 A4 C2 A5 C2 A6 C2 A7 C2 A8 C2 A9 C2 AA C2 AB C2 AC C2 AD C2 AE C2 AF C2 B0 C2 B1 C2 B2 C2 B3 C2 B4 C2 B5 C2 B6 C2 B7 C2 B8 C2 B9 C2 BA C2 BB C2 BC C2 BD C2 BE C2 BF C3 80 C3 81 C3 82 C3 83 C3 84 C3 85 C3 86 C3 87 C3 88 C3 89 C3 8A C3 8B C3 8C C3 8D C3 8E C3 8F C3 90 C3 91 C3 92 C3 93 C3 94 C3 95 C3 96 C3 97 C3 98 C3 99 C3 9A C3 9B C3 9C C3 9D C3 9E C3 9F C3 A0 C3 A1 C3 A2 C3 A3 C3 A4 C3 A5 C3 A6 C3 A7 C3 A8 C3 A9 C3 AA C3 AB C3 AC C3 AD C3 AE C3 AF C3 B0 C3 B1 C3 B2 C3 B3 C3 B4 C3 B5 C3 B6 C3 B7 C3 B8 C3 B9 C3 BA C3 BB C3 BC C3 BD C3 BE

最佳答案

您可能最好使用 Uint8Array(即 0–255 范围内的无符号字节数组),而不是使用 String;请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array 。例如:

ildablob[argument0] = new Uint8Array(1);
ildablob[argument0][0] = argument1;

...

var blob = new Blob(ildablob, {type: "application/octet-stream"});

另外,顺便说一句 - argument0argument1 是糟糕的变量名。你提到你受到 GameMaker 的限制;是这个原因吗?看来应该有某种方法来解决这个问题。

关于javascript - javascript 中字符代码 128 以上的二进制字符串出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com