Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base64将Javascript编码为C#_C#_Javascript_Arrays_String_Base64 - Fatal编程技术网

Base64将Javascript编码为C#

Base64将Javascript编码为C#,c#,javascript,arrays,string,base64,C#,Javascript,Arrays,String,Base64,我正在尝试将一些Javascript移植到C#,但遇到了一些麻烦。我正在移植的javascript调用这个 var binary = out.map(function (c) { return String.fromCharCode(c); }).join(""); return btoa(binary); out是一个数字数组。我知道这是用数字和fromCharCode向字符串中添加字符。起初,我不确定我的C#等价物btoa是否正常工作,但我唯一遇到问题的字符是前6个或8个。除前几个

我正在尝试将一些Javascript移植到C#,但遇到了一些麻烦。我正在移植的javascript调用这个

var binary = out.map(function (c) {
    return String.fromCharCode(c);
}).join("");
return btoa(binary);
out是一个数字数组。我知道这是用数字和fromCharCode向字符串中添加字符。起初,我不确定我的C#等价物btoa是否正常工作,但我唯一遇到问题的字符是前6个或8个。除前几个字符外,我的编码字符串输出相同

起初在C#我是这样做的

String binary = "";
foreach(int val in output){
    binary += ((char)val);
}
然后我试着

foreach(int val in output){
   System.Text.ASCIIEncoding convertor = new System.Text.ASCIIEncoding();
   char o = convertor.GetChars(new byte[] { (byte)val })[0];
   binary += o;
}
这两种方法都适用于字符串的后面字符,但不适用于开头字符。我已经研究过了,但我不知道我遗漏了什么

我的数字数组如下:{10135,3,10182,…}

我知道10是换行符,3是文本结尾,182是¨,但让我困惑的是135应该是双匕首。当我打印字符串时,Javascript不会显示它

因此,当字符串转换为Base64时,结果是我的字符串看起来像Cj8DCj8CRFF。。。。虽然Javascript字符串看起来像CocDCrYCRFF。。。。其余字符串相同,使用的int数组相同


有什么想法吗?

重要的是要理解,二进制数据并不总是表示给定编码中的有效文本,有些编码具有可变的字节数来表示不同的字符。简而言之:二进制数据和文本根本不一样,在某些情况下,您只能通过遵循清晰、准确的规则在两者之间进行转换。治疗不当会引起疼痛

这就是说,如果您有一个
int
s的列表,它们总是在0-255范围内,应该成为base64字符串,那么下面是一种方法:

var output = new[] { 0, 1, 2, 68, 69, 70, 254, 255 };
var binary = new List<byte>();
foreach(int val in output){
    binary.Add((byte)val);
}
var result = Convert.ToBase64String(binary.ToArray());
JS使用的编码似乎与在
byte
char
之间转换相同(
char
s>255无效),这不是可用的标准
编码之一

下面是如何组合原始数字和字符串,然后将其转换为base64

checked // ensures that values outside of byte's range do not fail silently
{
    var output = new int[] { 10, 135, 3, 10, 182 };
    var binary = output.Select(x => (byte)x)
           .Concat("Hello, world".Select(c => (byte)c)).ToArray();

    var result = Convert.ToBase64String(binary);
}

您正在尝试对二进制数据或文本进行编码吗?另外,您可能需要读取(或在我的C代码中输出)一个数字数组。我试着把它编码成一个文本字符串。你是个救命恩人。将其转换为字节正是需要的。我从int到char的转换不能使用前7个字符。非常感谢你!
checked // ensures that values outside of byte's range do not fail silently
{
    var output = new int[] { 10, 135, 3, 10, 182 };
    var binary = output.Select(x => (byte)x)
           .Concat("Hello, world".Select(c => (byte)c)).ToArray();

    var result = Convert.ToBase64String(binary);
}