Записать текстовые файлы без Порядка байтов Mark (BOM)?

Я пытаюсь создать текстовый файл с помощью VB.Net с кодированием UTF8 без BOM. Кто-либо может помочь мне, как сделать это?
Я могу записать файл с кодированием UTF8, но, как удалить Порядок байтов Mark из него?

edit1: Я попробовал код как это;

    Dim utf8 As New UTF8Encoding()
    Dim utf8EmitBOM As New UTF8Encoding(True)
    Dim strW As New StreamWriter("c:\temp\bom\1.html", True, utf8EmitBOM)
    strW.Write(utf8EmitBOM.GetPreamble())
    strW.WriteLine("hi there")
    strW.Close()

        Dim strw2 As New StreamWriter("c:\temp\bom\2.html", True, utf8)
        strw2.Write(utf8.GetPreamble())
        strw2.WriteLine("hi there")
        strw2.Close()

1.html создаются с UTF8, кодирующим только, и 2.html создаются с форматом кодирования ANSI.

Упрощенный подход - http://whatilearnttuday.blogspot.com/2011/10/write-text-files-without-byte-order.html

115
задан Amy 6 April 2016 в 15:10
поделиться

3 ответа

Чтобы опустить метку порядка байтов (BOM), ваш поток должен использовать экземпляр UTF8Encoding отличный от System.Text.Encoding.UTF8 (который настроен на генерацию BOM). Есть два простых способа сделать это:

1. Явное указание подходящей кодировки:

  1. Вызов конструктора UTF8Encoding с False для параметра encoderShouldEmitUTF8Identifier.

  2. Передайте экземпляр UTF8Encoding конструктору потока.

' VB.NET:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
// C#:
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
using (var sink = new StreamWriter("Foobar.txt", false, utf8WithoutBom))
{
    sink.WriteLine("...");
}

2. Использование кодировки по умолчанию:

Если вы вообще не передадите Encoding в конструктор StreamWriter, StreamWriter по умолчанию будет использовать кодировку UTF8 без BOM, поэтому следующее должно работать так же хорошо:

' VB.NET:
Using sink As New StreamWriter("Foobar.txt")
    sink.WriteLine("...")
End Using
// C#:
using (var sink = new StreamWriter("Foobar.txt"))
{
    sink.WriteLine("...");
}

Наконец, обратите внимание, что опускание BOM допустимо только для UTF-8, но не для UTF-16.

199
ответ дан 24 November 2019 в 02:23
поделиться

Возможно, введенный текст содержит метку порядка байтов. В этом случае вы должны удалить его перед написанием.

-1
ответ дан 24 November 2019 в 02:23
поделиться

Попробуйте следующее:

Encoding outputEnc = new UTF8Encoding(false); // create encoding with no BOM
TextWriter file = new StreamWriter(filePath, false, outputEnc); // open file with encoding
// write data here
file.Close(); // save and close it
28
ответ дан 24 November 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: