OK, tôi đang cố gắng làm việc với các tệp văn bản UTF8. Tôi liên tục chiến đấu với các ký tự BOF mà người viết viết xuống cho UTF8, điều này thổi khá nhiều thứ tôi cần sử dụng để đọc tệp bao gồm cả bộ nối tiếp và các trình đọc văn bản khác.UTF8 Bắt đầu của các ký tự Tệp đang phá vỡ bộ nối tiếp và trình đọc
Tôi nhận được một lãnh đạo sáu byte dữ liệu:.
0xEF
0xBB
0xBF
0xEF
0xBB
0xBF
(bây giờ mà tôi đang nhìn vào nó, tôi nhận ra có hai nhân vật có Đó có phải là dấu hiệu UTF8 BOF Tôi gấp đôi mã hóa? nó)?
Lưu ý trình nối tiếp mã hóa thành UTF8, sau đó luồng bộ nhớ nhận chuỗi là UTF8, sau đó tôi ghi chuỗi vào tệp bằng UTF8 ... có vẻ như rất nhiều dự phòng. Suy nghĩ?
//I'm storing this xml result to a database field. (this one includes the BOF chars)
using (MemoryStream ms = new MemoryStream())
{
Utility.SerializeXml(ms, root);
xml = Encoding.UTF8.GetString(ms.ToArray());
}
//later on, I would take that xml and then write it out to a file like this:
File.WriteAllText(path, xml, Encoding.UTF8);
public static void SerializeXml(Stream output, object data)
{
XmlSerializer xs = new XmlSerializer(data.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
settings.Encoding = Encoding.UTF8;
XmlWriter writer = XmlTextWriter.Create(output, settings);
xs.Serialize(writer, data);
writer.Flush();
writer.Close();
}
Hoàn hảo! Điều này đã trả lời câu hỏi của tôi. Tôi đã có thể viết các tập tin mà không có BOM. Tôi đã thay thế tất cả các vị trí bằng cách sử dụng 'Encoding.UTF8' bằng' UTF8Encoding (false) 'mới. – Nathan