【问题标题】:C# version of the javascript function btoaC#版本的javascript函数btoa
【发布时间】: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


【解决方案1】:

解决了。对于任何想知道所使用的编码是 iso 编码的人。 javascript中的btoa函数可以通过以下c#方法进行复制:

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

【讨论】:

  • ATOB() 怎么样? ;-)
【解决方案2】:

解码如下:

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

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多