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

Per impostazione predefinita, StringWriter si pubblicizzerà come UTF-16. Solitamente lo XML è in UTF-8. Così posso risolvere questo problema sottoclasse StringWriterDovrei preoccuparmi della codifica durante la serializzazione?

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

Ma perché dovrei preoccupare di questo? Cosa sarà se decido di utilizzare StringWriter (come ho fatto io) invece di Utf8StringWriter? Avrò qualche bug?

Dopo che scriverò questa stringa di MongoDb

+0

Fate le risposte a questa domanda di aiuto? http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8 –

risposta

3

s' StringWriterEncoding proprietà in realtà non è poi così utile, come la cosa sottostante si scrive è un StringBuilder, che produce un Net string. Le stringhe .Net sono codificate internamente in utf16, ma questo è un dettaglio di implementazione di cui non devi preoccuparti. Encoding è solo una proprietà ereditata da TextWriter, perché un TextWriter può potenzialmente scrivere su destinazioni in cui la codifica è importante (Stream, byte[], ...).

Alla fine, si finisce con un semplice vecchio string. La codifica che userai per serializzare quella stringa in seguito non è ancora stata risolta, e se stai usando un'implementazione client MongoDb che prende una stringa come argomento, non è nemmeno una tua preoccupazione!


Una nota a parte, ignorando il getter della proprietà Encoding non cambierebbe il modo di codifica accadrebbe all'interno anche se la codifica è stato effettivamente coinvolto in StringWriter

Problemi correlati