C#版的javascript函数btoa

时间:2017-09-07 09:49:23

标签: javascript c# .net node.js

我需要重新编写从js到c#的东西,在一串unicode字符的js中使用btoa方法将它们转换为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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

解码如下:

string base64EncodedString = "6Q==";
Encoding.GetEncoding(28591).GetString(Convert.FromBase64String(base64EncodedString));
// "é"