C#/TypeScript字节数组在发送到客户端时被编码

4
我将尝试使用C#从数据库获取一个字节数组,并将其发送给使用JavaScript/TypeScript编写的前端客户端,但似乎字节数组在从后端发送到前端之间被编码了。 数据库中的数据是一个varbinary,值为:0x00000001。 我设置了断点,在C#代码返回检索到的值的位置,我得到了一个具有以下值的字节数组:[0,0,0,1]。 然而,当它到达客户端时,该值为:"AAAAAQ=="。 我已尝试使用以下代码进行解码:
let encodedString = encodeURI(encodeURIComponent(flag));

let arr = [];
for (let i = 0; i < encodedString.length; i++) {
    arr.push(encodedString.charCodeAt(i));
}

但是该代码返回以下数组值:[65、65、65、65、65、81、37、50、53、51、68、37、50、53、51、68]。
数据为何被编码,如何在TypeScript中解码或在发送到客户端时防止其被编码?

"AAAAAQ==" 是 0x00000001 的 Base64 编码版本。 - phuzi
@phuzi 如果我试图使用atob()将其解码为base64字符串,它只会返回一个框形符号。 - CodyCS
你期望非文本值显示为什么? - phuzi
我希望它返回我的原始字节数组值0001、1或类似的内容,以便我可以进行二进制数学运算。 - CodyCS
1个回答

5
"

"AAAAAQ==" 是十六进制值 0x00000001 的 Base64 编码。因此,您需要使用 atob 将其转换回来,然后将每个字符编码推入数组中。

"

let text = 'AAAAAQ==';

let bin = atob(text);

let bytes = [];
for (let i = 0; i< bin.length; i++){
    bytes.push(bin.charCodeAt(i));
}

console.log(bytes);


运行得非常完美!非常感谢你! - CodyCS
1
这是一个很好的答案(已点赞)。如果您有非拉丁字符(例如中文),atob 可能无法处理它。请参见 https://dev59.com/Zl0a5IYBdhLWcg3woZ83 - JsAndDotNet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接