Để tải file XML với mã hóa tùy ý Tôi có đoạn mã sau:Cách phát hiện mã hóa tốt nhất trong tệp XML?
Encoding encoding;
using (var reader = new XmlTextReader(filepath))
{
reader.MoveToContent();
encoding = reader.Encoding;
}
var settings = new XmlReaderSettings { NameTable = new NameTable() };
var xmlns = new XmlNamespaceManager(settings.NameTable);
var context = new XmlParserContext(null, xmlns, "", XmlSpace.Default,
encoding);
using (var reader = XmlReader.Create(filepath, settings, context))
{
return XElement.Load(reader);
}
này hoạt động, nhưng nó có vẻ hơi kém hiệu quả để mở tập tin hai lần. Có cách nào tốt hơn để phát hiện mã hóa như vậy mà tôi có thể thực hiện:
1. Open file
2. Detect encoding
3. Read XML into an XElement
4. Close file
Chỉ cần gọi [XmlReaderCreate (Stream)] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx) quá tải hoạt động giống như cách phát hiện mã hóa? –
@petrk. - Tôi đang sử dụng XmlTextReader một cách rõ ràng vì đó là lớp cung cấp thuộc tính 'Encoding'. Bạn không chắc chắn những gì khác bạn đã có trong tâm trí? –
Phải, hãy để tôi giải thích. Có vẻ như 'XElement.Load (XmlReader.Create (FileStream mới (filepath, FileMode.Open)))' nên làm điều gì đó (vứt bỏ các tài nguyên bị bỏ qua cho ngắn gọn). Tài liệu cho [XmlReader.Create (Stream)] (http://msdn.microsoft.com/en-us/library/756wd7zs.aspx) nói: _The XmlReader quét các byte đầu tiên của luồng tìm kiếm một dấu thứ tự byte hoặc dấu hiệu khác của mã hóa. Khi mã hóa được xác định, mã hóa được sử dụng để tiếp tục đọc luồng và xử lý tiếp tục phân tích cú pháp đầu vào dưới dạng luồng (Unicode) characters._ Tôi đã tự hỏi liệu phát hiện mã hóa –