我应该在序列化过程中担心编码吗?
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?
