Это - выстрел в темноте, но Вы могли попробовать двойную буферизацию управление.
SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer, true)
XmlReader
автоматически нормализует \ r \ n \
в \ n
. Хотя это кажется необычным для Windows, на самом деле это требуется спецификацией XML ( http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends ).
Вы можете выполнить String.Replace
:
string s = reader.ReadOuterXml().Replace("\n", "\r\n");
XmlReader читает файлы, а не записывает их. Если вы получаете \ n в вашем ридере, это потому, что это то, что находится в файле. И \ n, и \ r являются пробелами и семантически одинаковы в XML, это не повлияет на значение или содержание данных.
Это похоже на C #, а не на Ruby. Как говорит бинарный кодировщик, ReadOuterXml определен для возврата нормализованного XML. Обычно это именно то, что вам нужно. Если вам нужен необработанный XML, вы должны использовать Encoding.UTF8.GetString (memStream.ToArray ())
, а не XmlReader
.
Есть более быстрый способ, если вы просто пытаетесь перейти на UTF-8. Сначала создайте писателя:
public class EncodedStringWriter : StringWriter
{
public EncodedStringWriter(StringBuilder sb, Encoding encoding)
: base(sb)
{
_encoding = encoding;
}
private Encoding _encoding;
public override Encoding Encoding
{
get
{
return _encoding;
}
}
}
Затем используйте его:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<foo><bar /></foo>");
StringBuilder sb = new StringBuilder();
XmlWriterSettings xws = new XmlWriterSettings();
xws.Indent = true;
using( EncodedStringWriter w = new EncodedStringWriter(sb, Encoding.UTF8) )
{
using( XmlWriter writer = XmlWriter.Create(w, xws) )
{
doc.WriteTo(writer);
}
}
string xml = sb.ToString();
Надо отдать должное, если кредит причитается .