gpt4 book ai didi

c# - 我应该担心序列化期间的编码吗?

转载 作者:太空狗 更新时间:2023-10-29 20:33:13 26 4
gpt4 key购买 nike

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(就像我所做的那样)而不是 Utf8StringWriter 会怎样?我会有一些错误吗?

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

最佳答案

StringWriterEncoding 属性实际上没有那么有用,因为它写入的底层是一个 StringBuilder,它会生成一个 .网络字符串。 .Net 字符串在内部以 utf16 编码,但这是您不必担心的实现细节。 Encoding 只是一个继承自 TextWriter 的属性,因为 TextWriter 可能会写入编码很重要的目标(Stream, byte[], ...).

最后,您将得到一个普通的旧字符串。您稍后将用于序列化该字符串的编码尚未确定,如果您使用的是将字符串作为参数的 MongoDb 客户端实现,您甚至都不必担心!


附带说明,重写 Encoding 属性的 getter 不会改变内部编码的方式,即使编码实际上涉及 StringWriter

关于c# - 我应该担心序列化期间的编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com