我在MacOS的命令行中使用openssl base64 -in en -out en1将一个文件编码为base64,我正在使用以下代码读取此文件:

string fileContent = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, MConst.BASE_DIR, "en1"));
var b1 = Convert.FromBase64String(fileContent);
var str1 = System.Text.Encoding.UTF8.GetString(b1);

我得到的字符串在实际文件内容之前有一个?.我不知道是什么原因造成的,如果有任何帮助,我们将不胜感激.

输入示例:

import pandas
import json

编码文件示例:

77u/DQppbXBvcnQgY29ubmVjdG9yX2FwaQ0KaW1wb3J0IGpzb24NCg0K

基于C代码的输出:

?import pandas
import json

推荐答案

通常,当您从文本文件中读取UTF(带BOM)时,解码会在幕后为您处理.例如,无论文本文件是否有BOM表,以下两行都将正确读取UTF文本:

File.ReadAllText(path, Encoding.UTF8);
File.ReadAllText(path); // UTF8 is the default.

问题是您正在处理已编码为Base64字符串的UTF文本.因此,ReadAllText()无法再为您处理BOM.您可以通过(判断并)从字节数组中删除前3个字节来自己完成,也可以将该作业(job)委托给StreamReader which is exactly what ReadAllText() does:

var bytes = Convert.FromBase64String(fileContent);
string finalString = null;

using (var ms = new MemoryStream(bytes))
using (var reader = new StreamReader(ms))  // Or:
// using (var reader = new StreamReader(ms, Encoding.UTF8))
{
    finalString = reader.ReadToEnd();
}
// Proceed to using finalString.

Csharp相关问答推荐

如何阻止注释被包含在C#release build. exe中

MudBlazor—MudDataGrid—默认过滤器定义不允许用户修改基本过滤器

在C#中,DirectoryEntry返回空AuditRules集合,即使审计规则确实存在

当通过Google的Gmail Api发送邮件时,签名会产生dkim = neutral(正文散列未验证)'

Azure Redis缓存与Entra ID身份验证

如何使用新的Microsoft.IdentityModel.JsonWebToken创建JwtSecurityToken?

Azure函数中实体框架核心的依赖注入

为什么C#认为这个非托管 struct 有一个重叠

EF核心区分大小写的主键

在.NET 8最低API中从表单绑定中排除属性

使用C#和.NET 7.0无法访问Cookie中的数据

如何让游戏对象在切换场景时被销毁,但在开始新游戏时重新锁定

如何使用Npgsql从SELECT获得所有查询结果

为什么我的用户界面对象移动到略低于实际目标?

具有嵌套属性的IGGroup

删除MudRadio时,MudRadioGroup未 Select 正确的MudRadio

C#如何将SQL查询转换为Lambda表达式

try 在ILogger提供程序中获取appSettings.json设置

在给定条件下,是否可以将某些变量expose 给Unity判断员?

C#Razor语法