我里面有一个文件,其中有 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")
。
答案 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)
由于它已经是string
,reader.ReadToEndAsync()
会读取整个文件直到结尾,然后将其返回到string
。
您不需要执行Encoding.ASCII.GetString(fileContents);
,请在执行以下操作后检查fileContents
:
using (var reader = new StreamReader(stream))
{
fileContents = await reader.ReadToEndAsync();
// here
}
现在Convert.FromBase64String(fileContents);
进行操作,比从字节获取字符串要多。