Убрать BOM из файла

195
11 августа 2018, 14:00

Есть массив байтов byte[] buffer, я считываю его в строку и преобразую в base64

string chunk = Convert.ToBase64String(buffer);

После я передаю ее в powershell-скрипт на С#, где декодирую обратно и записываю в файл эту строку

$DataDecoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('Chunk'))
Invoke-Command {$using:DataDecoded | Add-Content -Path C:\Test\Script1.ps1 -NoNewLine} -ComputerName " + configuration.Ip + @" -Credential $Cred

В итоге таких циклов может быть несколько пока копирую файл кусками, и на выходе получаю файл где в самом начале первой строки стоит знак вопроса '?' Больше нигде нет, если меняю кодировку в строке на ASCII то появляется три знака вопроса '???'

Я так понимаю, это BOM. Мне конечно нужен файл без этих знаков вопроса...возможно как-то его убрать? я уже перепробовал все варианты с этими кодировками

Answer 1

BOM (byte order mark) существует в файле. Вот и нужно решать проблему при чтении из файла!

Наверняка вы читаете массив байтов из файла следующим образом:

var bytes = File.ReadAllBytes(path);

Естественно, если в файле присутствует BOM, то эти байты попадают в массив.

Поэтому прочитайте данные из файла именно как текст, при этом BOM будет устранена. Далее из текста получите байты в нужной кодировке.

var text = File.ReadAllText(path);
var bytes = Encoding.UTF8.GetBytes(text);
Answer 2

Например так:

if (String1.StartsWith(Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()), StringComparison.Ordinal)) {
   String2 = String1.Remove(0, Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()).Length);
}

Можно в лоб, по проще:

String1.Trim(new char[]{'\uFEFF'});

или так чтоб ещё убрать пробел между BOM и текстом:

String1.Trim(new char[]{'\uFEFF','\u200B'});
Answer 3

Я удалил символы отвечающие за BOM, только уже с base64 конвертированной строки. У меня получилось вот так:

fileChunk = fileChunk.Replace("77u/", "");
READ ALSO
Неявное преобразование char в int

Неявное преобразование char в int

У Шилдта в книге написано: "В C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно"Подскажите, пожалуйста,...

164
Запрос к таблице Linq. ASP.NET/C#

Запрос к таблице Linq. ASP.NET/C#

У меня такое заданиеВ момент регистрации пользователю добавляется роль

184
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable

192
Как вывести информацию SQL в DataGrid?

Как вывести информацию SQL в DataGrid?

Хотел попробовать написать программу по правилам паттерна MVVMФактически я никогда не работал с ним

179