2008-10-01 17 views
5

Có cách nào để xuất nội dung của một XDocument không có BOM không? Khi đọc đầu ra bằng Flash, nó gây ra lỗi.Vấn đề với XDocument và BOM (Byte Order Mark)

+0

thể trùng lặp của [XDocument: Tiết kiệm XML để nộp mà không BOM] (http : //stackoverflow.com/questions/4942825/xdocument-saving-xml-to-file-without-bom) –

Trả lời

9

Nếu bạn đang viết XML bằng XmlWriter, bạn có thể đặt Mã hóa thành mã đã được khởi tạo để loại bỏ BOM.

EG: constructor System.Text.UTF8Encoding của mất một boolean để xác định xem bạn muốn BOM, vì vậy:

XmlWriter writer = XmlWriter.Create("foo.xml"); 
writer.Settings.Encoding = new System.Text.UTF8Encoding(false); 
myXDocument.WriteTo(writer); 

có tạo ra một XmlWriter với mã UTF-8 và không có Byte Order Mark.

+0

writer.Settings.Encoding chỉ đọc được –

+0

Bạn có chắc chắn không? Tôi không nhận được lỗi biên dịch và tài liệu cho biết nó không chỉ đọc: http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.encoding.aspx –

+0

làm cách nào để tôi nhận được từ đây đến một chuỗi? –

0

Bạn có thể sử dụng System.Text.Encoding.Convert() trên đầu ra; Cũng giống như một cái gì đó để thử, không phải cái gì tôi đã thử nghiệm.

0

Chuyển đổi thành chuỗi, sau đó tự xóa dấu đó.

2

Kind của một sự kết hợp của thông tin đăng, có lẽ một cái gì đó như thế này:


MemoryStream ms = new MemoryStream(); 
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false)); 
xmlDocument.Save(writer); 
1

Như đã trình bày, vấn đề này có một mùi khó chịu.

Theo this support note, Flash sử dụng BOM để phân biệt giữa UTF-16BE và UTF-16LE, điều này là đúng. Vì vậy, bạn không nên nhận được một lỗi từ Flash: XDocument sản xuất UTF16 mã hóa cũng được hình thành XML, và Macromedia tuyên bố rằng Flash có thể đọc UTF16 mã hóa cũng được hình thành XML.

Điều này làm cho tôi nghi ngờ rằng bất kỳ vấn đề gì mà bạn đang gặp phải, có thể nó không phải do BOM gây ra. Nếu đó là tôi, tôi sẽ đào nhiều hơn, với kỳ vọng rằng vấn đề thực sự là ở một nơi khác.

3

Tôi không thể thêm nhận xét ở trên, nhưng nếu có ai sử dụng đề xuất của Chris Wenham, hãy nhớ Vứt bỏ tác giả! Tôi đã dành thời gian tự hỏi tại sao đầu ra của tôi bị cắt ngắn, và đó là lý do.

Đề nghị một sự thay đổi using(XmlWriter...) {...} để gợi ý của Chris

5

nhẹ mod để trả lời Chris Wenham của.

Bạn không thể sửa đổi mã hóa khi các XmlWriter được tạo ra, nhưng bạn có thể đặt nó bằng cách sử dụng XmlWriterSettings khi tạo XmlWriter

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Encoding = new System.Text.UTF8Encoding(false); 

XmlWriter writer = XmlWriter.Create("foo.xml", settings); 
myXDocument.WriteTo(writer); 
Các vấn đề liên quan