Мне нужно перекопировать что-то из js в С#, который использует метод btoa в js для строки символов unicode, чтобы преобразовать их в base64. Однако, насколько я знаю, кодировка, используемая javascrpt, отличается от всех доступных в С#. Мне нужно, чтобы кодировка была точно такой же и не возвращала разные значения на этих языках. Я попытался настроить сервер nodejs и сделать запросы на него, чтобы запустить кодировку таким образом, но это слишком медленно и нестабильно. Мне кажется, что мне нужно будет сделать свою собственную таблицу кодирования, но я понятия не имею, с чего начать или как это реализовать. Если кто-то может помочь, это будет очень признательно.
tl; dr: javascript btoa возвращает другое значение, чем кодирование 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
Я знаю, что в предыдущем примере используется кодировка utf8, которая js не делает, проблема в том, что в.net нет кодировки, которая соответствует кодировке javascript.
Edit: попытался сравнить байтовые массивы как С#, так и javascript, но проблема в том, что функция btoa использует неназванную кодировку, поэтому я не могу фактически получить байты для печати байтового массива для него, не предполагая, что это что-то вроде utf8, которое оно не является.
Проработал. Для всех, кто интересуется кодировкой, используемой iso-кодировкой. Функция btoa в javascript может быть реплицирована с использованием следующего метода С#:
public string encoding(string toEncode)
{
byte[] bytes= Encoding.GetEncoding(28591).GetBytes(toEncode);
string toReturn = System.Convert.ToBase64String(bytes);
return toReturn;
}