【问题标题】:C#/TypeScript Byte Array getting encoded when sent to clientC#/TypeScript 字节数组在发送到客户端时被编码
【发布时间】:2018-09-27 10:17:12
【问题描述】:

我正在尝试通过 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 如果我尝试使用 atob() 将其解码为 base64 字符串,它只会返回一个框符号
  • 您希望非文本值显示为什么?
  • 我希望它返回我的原始字节数组值 0001、1 或类似的值,以便我可以用它进行二进制数学运算。

标签: c# arrays typescript


【解决方案1】:

"AAAAQ==" 是 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);

【讨论】:

  • 完美运行!非常感谢!
  • 这是一个很好的答案(已投票)。如果您有非拉丁字符(例如中文),atob 可能无法很好地处理它。见stackoverflow.com/questions/30106476/…
猜你喜欢
  • 2011-10-11
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多