2016-03-11 25 views
7
public string Serialize(BackgroundJobInfo info) 
{ 
    var stringBuilder = new StringBuilder(); 
    using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture)) 
    { 
     var writer = XmlWriter.Create(stringWriter); 
     ... 

Domyślnie StringWriter będzie się reklamować jako będący w UTF-16. Zwykle XML jest w UTF-8. Więc mogę rozwiązać ten problem przez instacji StringWriterCzy powinienem martwić się kodowaniem podczas serializacji?

public class Utf8StringWriter : StringWriter 
{ 
    public override Encoding Encoding 
    { 
     get { return Encoding.UTF8; } 
    } 
} 

Ale dlaczego mam się tym martwić? Co będzie, jeśli zdecyduję się użyć StringWriter (tak jak ja) zamiast Utf8StringWriter? Czy mam jakiś błąd?

Po tym będę pisać ten ciąg do MongoDb

+0

Czy odpowiedź na to pytanie pomoc? http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8 –

Odpowiedz

3

StringWriter „s Encoding własności faktycznie nie jest użyteczny, jako podstawowa rzecz to zapisuje to StringBuilder, która produkuje .NET string. Łańcuchy .Net są kodowane wewnętrznie w utf16, ale to szczegół implementacji, o który nie musisz się martwić. Encoding to tylko właściwość odziedziczona po TextWriter, ponieważ TextWriter może potencjalnie pisać do miejsc docelowych, w których kodowanie ma znaczenie (Stream, byte[], ...).

W końcu skończy się zwykłym starym string. Kodowanie, którego będziesz używać do serializowania tego ciągu, nie zostało jeszcze naprawione, a jeśli używasz implementacji klienta MongoDb, która przyjmuje ciąg jako argument, nie jest to nawet twoja troska!


Na marginesie, przesłanianie getter właściwości Encoding nie zmieni sposób kodowania będzie zdarzyć wewnątrz nawet jeśli kodowanie faktycznie zaangażowany w StringWriter

Powiązane problemy