簡體   English   中英

如何從編碼的 base64 UTF 字符串中刪除 BOM?

[英]How to remove BOM from an encoded base64 UTF string?

我在 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 個字節來自己完成,或者將該作業委托給 StreamReader, 這正是ReadAllText()所做的

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM