如何将 AWS 错误消息中收到的字节转换为 Javascript 中可读的内容?
How can I convert bytes received in an AWS error message into something readable in Javascript?
我在通过 JavaScript 访问 Amazon S3 时尝试调试错误的签名计算。 AWS returns 一份 XML 文档,其中包括:
<StringToSignBytes>41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65</StringToSignBytes>
我想知道如何读取这些字节(我坐在那里调试了这么久,我猜我已经绝望了......)。
目前我正在使用 Node,但使用的是:
console.log(new Buffer([41 57 53 34]).toString("utf8"))
我真的一无所获。
问题:
有没有办法将这些字节转换成可以帮助我理解或找出我的请求失败原因的东西。
谢谢
编辑:
已尝试 Uint8Array
,抛出错误(至少是某些错误):
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(atob(encodedString)));
return decodedString;
}
var foo = "41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65".split(" ");
xxx = new Uint8Array(foo);
uintToString(xxx);
// > string contains invalid character
试试这个
var s = "41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65";
var array = s.split(" ").map(function(n) {
return Number.parseInt(n, 16);
});
var message = String.fromCharCode.apply(null, array);
我在通过 JavaScript 访问 Amazon S3 时尝试调试错误的签名计算。 AWS returns 一份 XML 文档,其中包括:
<StringToSignBytes>41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65</StringToSignBytes>
我想知道如何读取这些字节(我坐在那里调试了这么久,我猜我已经绝望了......)。
目前我正在使用 Node,但使用的是:
console.log(new Buffer([41 57 53 34]).toString("utf8"))
我真的一无所获。
问题:
有没有办法将这些字节转换成可以帮助我理解或找出我的请求失败原因的东西。
谢谢
编辑:
已尝试 Uint8Array
,抛出错误(至少是某些错误):
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(atob(encodedString)));
return decodedString;
}
var foo = "41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65".split(" ");
xxx = new Uint8Array(foo);
uintToString(xxx);
// > string contains invalid character
试试这个
var s = "41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 31 35 30 34 32 35 54 31 36 32 33 30 36 5a 0a 32 30 31 35 30 34 32 35 2f 65 75 2d 77 65 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 33 32 62 61 65 37 62 39 35 66 65 61 62 36 38 66 38 65 32 31 65 39 66 33 62 33 64 61 66 32 34 32 66 63 34 64 35 38 65 34 37 39 61 37 39 37 65 38 33 34 36 62 34 30 38 34 33 39 61 30 37 34 65";
var array = s.split(" ").map(function(n) {
return Number.parseInt(n, 16);
});
var message = String.fromCharCode.apply(null, array);