为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
料青山看我应如是 2022-12-31 13:01:05
我有一个文件里面有这个dGVzdA==,dGVzdA==是 byte[] 中的单词测试转换。之后我想让这个词再次进行字符串测试所以我这样做:[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 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

dGVzdA==是byte[]中的单词test convert。

不,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 部分。目前尚不清楚这是从哪里来的。

testdGVzdA==我这样做Encoding.ASCII.GetBytes("test")

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


查看完整回答
反对 回复 2022-12-31
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

因为它已经是一个string,reader.ReadToEndAsync()将读取整个文件直到最后并将它返回到一个string.


你不需要做Encoding.ASCII.GetString(fileContents);,检查fileContents后:


using (var reader = new StreamReader(stream))

{

    fileContents = await reader.ReadToEndAsync();

    // here

}

现在在Convert.FromBase64String(fileContents);那里你会得到你的字节而不是从字节中获取你的字符串。


查看完整回答
反对 回复 2022-12-31
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信