C#Filestream无法正确读取单词html

时间:2012-01-30 23:30:19

标签: c# encoding ms-word

我试图在网站上发布用Word编写的文章作为html,我有一个Windows客户端,将文章转换为html并将html发送到网站上的文件夹,然后我在IFrame中显示文章。但是在IE9中,图像不会显示,因为IE9会尝试将它们转换为矢量图形。我决定从负责这个的html中删除代码,这里开始我的问题。在我修改并保存文件后,我得到了垃圾字符,这些也显示在网页上。但是,如果我在notepad ++中手动编辑文件,我不会遇到同样的问题,如何使用C#读取保存在word中的文件作为html而不是获取这些垃圾字符?这是我的代码

    private bool AdjustHtmlPageForIE9Images(FileInfo file)
    {
        bool success = true;
        try
        {
            string content = File.ReadAllText(file.FullName);
            //replace [if gte vml 1] with [if gte iesucksopd 1]
            content = content.Replace("[if gte vml 1]", "[if gte iesucksopd 1]");
            //replace [if !vml] with [if !iesucksopd]
            content = content.Replace("[if !vml]", "[if !iesucksopd]");
            //now write the file over
            File.WriteAllText(file.FullName, content);
        }
        catch (Exception ex)
        {

            throw ex;
        }
        return success;
    }

这会导致显示一些垃圾字符。

大家好,感谢所有回复,这就是我为解决这个问题所采取的措施

嗨大家好,感谢最后的回复,我不得不在FF中打开并检查编码,它是Western Windows-1252,然后作为SLaks sed传递GetEncoding(1252)在读取和写入操作这里是修改代码。

    private bool AdjustHtmlPageForIE9Images(FileInfo file)
    {
        bool success = true;
        try
        {
            Encoding encoding = Encoding.GetEncoding(1252);
            string content = File.ReadAllText(file.FullName,encoding);
            //replace [if gte vml 1] with [if gte iesucksopd 1]
            content = content.Replace("[if gte vml 1]", "[if gte iesucksopd 1]");
            //replace [if !vml] with [if !iesucksopd]
            content = content.Replace("[if !vml]", "[if !iesucksopd]");
            //now write the file over
            File.WriteAllText(file.FullName, content, encoding);
        }
        catch (Exception ex)
        {

            throw ex;
        }
        return success;
    }

IE9无法做到像IFrame中的单词显示html这样简单的事情并不奇怪,难怪它的受欢迎程度不断下降。

2 个答案:

答案 0 :(得分:1)

您需要明确地将编码传递给ReadAllTextWriteAllText;否则,它将默认为UTF8。

通过Encoding.GetEncoding(1252)

答案 1 :(得分:0)

确保转换后的html文件是UTF-8或UTF-32编码,然后ReadAllText会正确检测到它。否则使用ReadAllText重载来提供转换后使用的编码参数。