[英]How do I preserve special characters when writing XML with XDocument.Save()?
我的源XML在其中具有版权字符©
。 使用以下代码编写XML时:
var stringWriter = new StringWriter();
segmentDoc.Save(stringWriter);
Console.WriteLine(stringWriter.ToString());
它会将版权字符渲染为带有圆圈的小“ c”。 我想保留原始代码,以便将其吐出为©
。 我怎样才能做到这一点?
更新:我还注意到源声明看起来像<?xml version="1.0" encoding="utf-8"?>
但是我保存的输出看起来像是<?xml version="1.0" encoding="utf-16"?>
。 我可以指出我希望输出仍然是utf-8吗? 这样可以解决吗?
Update2:此外,  
正在输出为ÿ
。 我绝对不希望这样!
更新3: §
正在变成一个小盒子,那也是错误的。 应该是§
我强烈怀疑您将无法执行此操作。 从根本上讲,版权标志是 ©
-它们是同一件事的不同表示形式,我希望内存中的表示形式可以对此进行规范化。
之后,您将如何处理XML? 任何理智的应用程序处理生成的XML都可以。
如果您使用ASCII明确编码它,您也许可以说服它使用实体引用。但是我不确定。
编辑:您绝对可以使它使用不同的编码。 您只需要一个StringWriter
,它报告其“本机”编码为UTF-8。 这是您可以使用的简单类:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
您可以尝试将其更改为也使用Encoding.ASCII
,然后看看对版权符号有什么作用...
以这种方式保存一些立陶宛语字符时,我遇到了同样的问题。 我找到了一种方法,可以通过用&
替换&
来作弊 ( &#x00A9;
编写©
依此类推)看起来很奇怪,但对我©
:)
也许您可以尝试不同的文档编码,请查看: http : //www.sagehill.net/docbookxsl/CharEncoding.html
看来UTF8无法解决问题。 以下内容与您的代码具有相同的症状:
MemoryStream ms = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(ms, new UTF8Encoding());
segmentDoc.Save(writer);
ms.Seek(0L, SeekOrigin.Begin);
var reader = new StreamReader(ms);
var result = reader.ReadToEnd();
Console.WriteLine(result);
我用ASCII尝试了相同的方法,但是最后用?
而不是©。
我认为将XML转换为字符串后使用字符串替换是您获得所需效果的最佳选择。 当然,如果您不仅对@copy感兴趣,那可能会很麻烦。 符号。
result = result.Replace("©", "\u0026#x00A9;");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.