Character encoding 如何在.Net XDocument中保留字符实体?

Character encoding 如何在.Net XDocument中保留字符实体?,character-encoding,linq-to-xml,escaping,Character Encoding,Linq To Xml,Escaping,我正在将一组服务移植到.Net 4.0,并发现(令我非常失望的是)在XElement.Value()中创建和存储的字符实体在我将XDocument对象转换为HTTP响应的XML流时正在“还原”为其原始字符值 “转义”字符需要作为字符实体出现在XML文档中(例如®;和not®),以便与仅允许非拉丁字符使用字符实体的旧式应用程序保持兼容 有没有一种方法(不同的文档类型、Encoding()方法或其他方法)可以在创建XML流时配置XDocument以保留这些字符实体?也许有一种替代XDocu

我正在将一组服务移植到.Net 4.0,并发现(令我非常失望的是)在XElement.Value()中创建和存储的字符实体在我将XDocument对象转换为HTTP响应的XML流时正在“还原”为其原始字符值

“转义”字符需要作为字符实体出现在XML文档中(例如
®;
和not®),以便与仅允许非拉丁字符使用字符实体的旧式应用程序保持兼容


有没有一种方法(不同的文档类型、Encoding()方法或其他方法)可以在创建XML流时配置XDocument以保留这些字符实体?也许有一种替代XDocument或XmlDocument的方法我可以使用?

您是否尝试过创建一个编码设置为latin-1的XmlWriter,然后使用它保存XDocument?我还没有尝试过,但它可能会强制它使用不必要的角色实体


如果连Unicode都不支持,你会使用什么样的可怕软件呢?

如果你想将文本存储为®;而不是®您必须使用XML中可用的任何机制(字符数据、转义字符等)转义所有保留字符(如&)。这意味着您将不会在XML文档中存储character®-您将存储一个符号、一个散列符号、四位数字和一个分号。但如果这是你想要的,那就是你应该做的如果您只是将
.Value
设置为
{它应该逐字存储,而不是解析-你确定你可以复制它吗?你会这么认为,不是吗?:-)它将与符号转换为
&,因此输出中会出现奇怪的胡言乱语。是的,我可以。在我输出响应之前,用一个真正的符号替换它们,但我希望我错过了一个配置标志,或设置,或读写器,或…尝试了两种不同的编码,但我仍然处于第一步。该软件是由服务消费者编写的遗留应用程序,他们希望转义高于127H的任何内容。@jerhewet:听起来很糟糕。告诉他们您的更新将强制提供适当的Unicode支持。