我应该在序列化过程中担心编码吗?

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 。 通常XMLUTF-8 。 所以我可以通过StringWriter来解决这个问题

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

但我为什么要担心呢? 如果我决定使用StringWriter (而不是Utf8StringWriterUtf8StringWriter ? 我会有一些错误吗?

之后,我将把这个字符串写入MongoDb


StringWriterEncoding属性实际上并没有那么有用,因为它写入的底层是一个StringBuilder ,它产生一个.Net string 。 .net字符串在utf16中内部编码,但这是您不必担心的实现细节。 Encoding仅仅是一个从TextWriter继承的属性,因为TextWriter可能会写入编码非常重要的目标( Streambyte[] ,...)。

最后,你最终会得到一个普通的旧string 。 稍后您将用于序列化字符串的编码尚未修复,如果您使用的是以字符串作为参数的MongoDb客户端实现,那么您甚至不关心它!


在附注中,重写Encoding属性的getter不会改变编码在内部发生的方式,即使编码实际上涉及到StringWriter

链接地址: http://www.djcxy.com/p/32775.html

上一篇: Should I be worried about encoding during serialization?

下一篇: Spring Security and OpenID Connect (OIDC)