Saya mencoba membuat file teks menggunakan VB.Net dengan pengkodean UTF8, tanpa BOM. Adakah yang bisa membantu saya, bagaimana melakukan ini?
Saya dapat menulis file dengan pengkodean UTF8 tetapi, bagaimana cara menghapus Byte Order Mark darinya?
edit1: Saya telah mencoba kode seperti ini;
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 dibuat hanya dengan pengkodean UTF8 dan 2.html dibuat dengan format pengkodean ANSI.
Pendekatan yang disederhanakan - http://whatilearnttuday.blogspot.com/2011/10/write-text-files-without-byte-order.html
vb.net
encoding
file-handling
byte-order-mark
Vijay Balkawade
sumber
sumber
Jawaban:
Untuk menghilangkan byte order mark (BOM), streaming Anda harus menggunakan instance
UTF8Encoding
selainSystem.Text.Encoding.UTF8
(yang dikonfigurasi untuk menghasilkan BOM). Ada dua cara mudah untuk melakukannya:1. Secara eksplisit menentukan pengkodean yang sesuai:
Panggil
UTF8Encoding
konstruktor denganFalse
for theencoderShouldEmitUTF8Identifier
parameter.Meneruskan
UTF8Encoding
instance ke konstruktor aliran.2. Menggunakan pengkodean default:
Jika Anda tidak memasok
Encoding
keStreamWriter
's konstruktor sama sekali,StreamWriter
akan dengan menggunakan standar encoding UTF8 tanpa BOM, sehingga berikut ini harus bekerja sama dengan baik:Terakhir, perhatikan bahwa menghilangkan BOM hanya diperbolehkan untuk UTF-8, bukan untuk UTF-16.
sumber
My.Computer.FileSystem.WriteAllText
menulis BOM jika tidak ada pengkodean yang ditentukan.My.Computer.FileSystem.WriteAllText
merupakan pengecualian dalam hal ini, mungkin menebak kompatibilitas VB ke belakang?File.WriteAllText
defaultnya adalah UFT8NoBOM.Coba ini:
sumber
Cukup gunakan metode
WriteAllText
dariSystem.IO.File
.Silakan periksa sampel dari File.WriteAllText .
sumber
Catatan menarik sehubungan dengan ini: anehnya, metode "CreateText ()" statis dari kelas System.IO.File membuat file UTF-8 tanpa BOM.
Secara umum ini adalah sumber bug, tetapi dalam kasus Anda ini bisa menjadi solusi yang paling sederhana :)
sumber
Jika Anda tidak menentukan
Encoding
saat membuat baru objekStreamWriter
default yangEncoding
digunakan adalahUTF-8 No BOM
yang dibuat melaluinew UTF8Encoding(false, true)
.Jadi untuk membuat file teks tanpa BOM, gunakan konstruktor yang tidak mengharuskan Anda menyediakan encoding:
sumber
leaveOpen
?StreamWriter
digunakan. Anda harus menentukannew UTF8Encoding(false, true)
agar pengkodean Anda dapat menentukanleaveOpen
dan tidak memiliki BOM.Saya pikir Roman Nikitin benar. Arti dari argumen konstruktor dibalik. False artinya tidak ada BOM dan true means dengan BOM.
Anda mendapatkan pengkodean ANSI karena file tanpa BOM yang tidak berisi karakter non-ansi persis sama dengan file ANSI. Coba beberapa karakter khusus dalam string "hai di sana" Anda dan Anda akan melihat pengkodean ANSI berubah menjadi tanpa-BOM.
sumber
XML Encoding UTF-8 tanpa BOM
Kita perlu mengirimkan data XML ke EPA dan aplikasinya yang membutuhkan input kita membutuhkan UTF-8 tanpa BOM. Oh ya, UTF-8 biasa seharusnya dapat diterima oleh semua orang, tetapi tidak untuk EPA. Jawaban untuk melakukan ini ada di komentar di atas. Terima kasih Roman Nikitin .
Berikut adalah potongan C # kode untuk pengkodean XML:
Untuk melihat apakah ini benar-benar menghapus tiga karakter utama dari file keluaran bisa menyesatkan. Misalnya, jika Anda menggunakan Notepad ++ (www.notepad-plus-plus.org), ini akan melaporkan "Encode in ANSI". Saya kira sebagian besar editor teks mengandalkan karakter BOM untuk mengetahui apakah itu UTF-8. Cara untuk melihat ini dengan jelas adalah dengan alat biner seperti WinHex (www.winhex.com). Karena saya mencari perbedaan sebelum dan sesudah saya menggunakan aplikasi Microsoft WinDiff .
sumber
Mungkin teks masukan Anda berisi tanda urutan byte. Dalam hal ini, Anda harus menghapusnya sebelum menulis.
sumber
Memberi Anda hasil seperti yang Anda inginkan (menurut saya).
sumber