如何将以字节为单位的in编码字符串转换为先前的字符串值?

时间:2019-04-26 08:16:24

标签: c# asp.net-core-webapi

我里面有一个文件,其中有 dGVzdA == dGVzdA == 是单词 test 以字节为单位的转换。 / p>

之后,我想让这个单词再次进行字符串 test 的测试,所以我这样做:

[HttpPost("[Action]")]
public async Task<IActionResult> ExtractLicenseData(IFormFile file){
    string fileContents ;

    using (var stream = file.OpenReadStream())
    {
        using (var reader = new StreamReader(stream))
        {
            fileContents = await reader.ReadToEndAsync();
        }
    }
    string test = Encoding.ASCII.GetString(fileContents); // error
    return BadRequest(test);
}

但是当我尝试做string test = Encoding.ASCII.GetString(fileContents);时,我遇到了错误:

  

无法从“字符串”转换为“字节[]”

要继续:

我有我的字符串 dGVzdA == ,我想最终将其转换为我的原始字符串 test

/!\要从测试转到 dGVzdA == ,我需要执行Encoding.ASCII.GetBytes("test")

2 个答案:

答案 0 :(得分:6)

  

dGVzdA ==是单词test convert in byte []。

否,dGVzdA==是字节0x74、0x65、0x73、0x74 ...的base64编码表示形式,而该文本又是文本“ test”的ASCII编码表示形式。

因此,如果您想要一个内容为0x74、0x65、0x73、0x74的字节数组,则只需执行base64解码即可:

byte[] bytes = Convert.FromBase64String(fileContents);

如果您随后希望通过应用ASCII编码返回到字符串,则可以使用:

string text = Encoding.GetString(bytes);

但是,如果无论如何文件内容肯定都是ASCII文本,最好先避免使用base64部分。不清楚它来自哪里。

  

要从test转到dGVzdA==,请执行Encoding.ASCII.GetBytes("test")

不,你不知道。 Encoding.ASCII.GetByte("test")返回一个字节数组,其字节为0x74、0x65、0x73、0x74,而dGVzdA==是通过base64编码将该字节数组转换为字符串的结果。

答案 1 :(得分:1)

由于它已经是stringreader.ReadToEndAsync()会读取整个文件直到结尾,然后将其返回到string

您不需要执行Encoding.ASCII.GetString(fileContents);,请在执行以下操作后检查fileContents

using (var reader = new StreamReader(stream))
{
    fileContents = await reader.ReadToEndAsync();
    // here
}

现在Convert.FromBase64String(fileContents);进行操作,比从字节获取字符串要多。