【发布时间】:2018-02-16 00:09:39
【问题描述】:
我需要将一些东西从 js 重新编码为 c#,利用 js 中的 btoa 方法在一串 unicode 字符上将它们转换为 base64。但是,据我所知,javascrpt 使用的编码与 c# 中可用的所有编码不同。我需要编码完全相同,并且不会在这些语言中返回不同的值。我尝试设置 nodejs 服务器并向其发出 get 请求,以便以这种方式运行编码,但这太慢且不稳定。我的印象是我需要制作自己的编码表,但我不知道从哪里开始或如何实现它。如果有人可以提供帮助,将不胜感激。
tl;dr:javascript 的 btoa 返回的值与 c# 中的 base 64 编码不同。我需要它是相同的值。
代码和输出:
c#:
String fromChar = new
String(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(fromChar);
Console.WriteLine(System.Convert.ToBase64String(plainTextBytes));
output = w7dHwroIfUgCAQA=
javascript:
var x = btoa(String.fromCharCode(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
console.log(x)
output =
90e6CH1IAgEA
我知道前面的例子使用了 js 没有的 utf8 编码,问题是 .net 中没有与 javascript 编码匹配的编码。
编辑:尝试比较 c# 和 javascript 的字节数组,但问题是 btoa 函数使用未命名的编码,所以我实际上无法获取字节来为其打印字节数组,而不假设它类似于不是 utf8。
【问题讨论】:
-
您在寻找ToBase64 方法吗?
-
你说过 “javascript 的 btoa 返回的值与 c# 中的 base 64 编码不同”。你能告诉我们在 JS 和 C# 中使用 Base64 编码的结果吗?有多种不同的 Base64 变体,有些对不同的值使用不同的字符,您可能只需要在输出字符串中进行查找/替换即可将其更改为您想要的格式。见en.wikipedia.org/wiki/Base64#Variants_summary_table
-
@AleksAndreev 没有返回不同的值。当然我会用一个不同的例子来编辑这个问题。给我一点时间。
-
@NickA 完成输出
-
您应该将两个字符串都转换为字节数组并进行比较。这可能不是base64算法的实现(实际上很可能不是),更多的是输入的问题。
标签: javascript c# .net node.js