我应该在序列化过程中担心编码吗?
public string Serialize(BackgroundJobInfo info)
{
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
{
var writer = XmlWriter.Create(stringWriter);
...
默认情况下, StringWriter
将自己宣传为UTF-16
。 通常XML
是UTF-8
。 所以我可以通过StringWriter
来解决这个问题
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
但我为什么要担心呢? 如果我决定使用StringWriter
(而不是Utf8StringWriter
) Utf8StringWriter
? 我会有一些错误吗?
之后,我将把这个字符串写入MongoDb
StringWriter
的Encoding
属性实际上并没有那么有用,因为它写入的底层是一个StringBuilder
,它产生一个.Net string
。 .net字符串在utf16中内部编码,但这是您不必担心的实现细节。 Encoding
仅仅是一个从TextWriter
继承的属性,因为TextWriter
可能会写入编码非常重要的目标( Stream
, byte[]
,...)。
最后,你最终会得到一个普通的旧string
。 稍后您将用于序列化字符串的编码尚未修复,如果您使用的是以字符串作为参数的MongoDb客户端实现,那么您甚至不关心它!
在附注中,重写Encoding
属性的getter不会改变编码在内部发生的方式,即使编码实际上涉及到StringWriter
上一篇: Should I be worried about encoding during serialization?