C#版的javascript函数btoa

Jam*_*gan 1 .net javascript c# node.js

我需要重新编写从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
Run Code Online (Sandbox Code Playgroud)

我知道前一个例子使用utf8编码,而js没有,问题是.net中没有与javascript编码匹配的编码.

编辑:试图比较c#和javascript的字节数组,但问题是btoa函数使用了一个未命名的编码,所以我实际上无法获得字节来打印它的字节数组而不假设它是像utf8那样的不是.

Jam*_*gan 10

解决了这个问题.对于任何想知道使用的编码是iso编码的人.可以使用以下c#方法复制javascript中的btoa函数:

public string encoding(string toEncode)
{
byte[] bytes= Encoding.GetEncoding(28591).GetBytes(toEncode);
string toReturn = System.Convert.ToBase64String(bytes);
return toReturn;
}
Run Code Online (Sandbox Code Playgroud)

  • ATOB() 怎么样?;-) (2认同)