将unicode字符保存为“”“到文件中; C#

时间:2011-02-11 18:38:53

标签: c# unicode filestream

我有一个xml文件(从xfdl转换而来),其中包含:

<custom:popUp xfdl:compute="toggle(activated,'off','on') == '1' ? viewer.messageBox('o Once you click ..... page.&#xD;o When you use the &#x201C;Create &#x201D; function in.......Portal.','Information'):''">

我加载它并使用...

保存
XmlDocument xmlOut = new XmlDocument(); //note: not read only
FileStream outfs = new FileStream(tempOutXmlFileName, FileMode.Open, FileAccess.Read,
                           FileShare.ReadWrite);
xmlOut.Load(outfs);
xmlOut.Save(tempOutXmlFileName);
outfs.Close();

此过程将一些unicode指令转换为实际字符,这些字符完全混淆了xml / xfdl解析,因为现在引号不应该是引号。

有没有人知道我可以保存文件的方式,所有可爱的&#x201C;字符都完整无缺?

谢谢。


好吧,在稍微摆弄一下并让xml-&gt; xfdl转换更好地工作之后,我遇到了一个新问题。

下面的解决方案似乎有效,并且xml的所有解析都是正确的,但是当我使用UTF-8对其进行编码并希望编码为ISO-8859时,读取xfdl文件的程序似乎不太喜欢-1

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用StreamReader和StreamWriter应该有所帮助。要清楚你是在尝试读取和写入同一个文件?我添加了一些很好的使用语句。

        XmlDocument xmlOut = new XmlDocument(); 
        //note: not read only
        using (FileStream outfs = new FileStream(tempOutXmlFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        using (StreamReader reader = new StreamReader(outfs, Encoding.UTF8))
        {
            xmlOut.Load(reader);
        }

        using (StreamWriter writer = new StreamWriter(tempOutXmlFileName, false, Encoding.UTF8))
        {
            xmlOut.Save(writer);
        }

我在StreamWriter中设置追加为false,似乎有道理。

答案 1 :(得分:0)

事实证明,逐字节读取和写入文件解决了问题,因为作者从未有机会对内容进行任何解释。