i18n中FileOpen和StringBuilder中的编码问题

时间:2011-04-11 18:05:11

标签: c# winforms encoding stringbuilder

当我查看我用i18n保存的文件时,可以使用“FïllÂllülle~”就可以了,这就是我想要的...但是代码中的方式我试图阅读这个文件的副本并将其作为String返回是这样的:

        string sLine = String.Empty;
        StringBuilder sHTMLText = new StringBuilder();
        int nFileHandle = FileSystem.FreeFile();

        sHTMLText.Append(String.Empty);
        FileSystem.FileOpen(nFileHandle, sFileName, OpenMode.Input, OpenAccess.Default, OpenShare.Default, -1);

        while (!FileSystem.EOF(nFileHandle))
        {
            sLine = FileSystem.LineInput(nFileHandle);
            sHTMLText.Append(sLine);
        };
        FileSystem.FileClose(nFileHandle);
        return sHTMLText.ToString();

但是当我调试它时,它正在破坏正确翻译的内容,如“FïllÂllülle~”并操纵它们,所以我认为我的方法不是以尊重编码的方式来做,就像我已经设置了我的计算机区域/语言设置为法语....所以如何更正我现有的代码或编写类似的东西,同样关心编码和我的计算机上设置的语言?

Thsanks

2 个答案:

答案 0 :(得分:1)

看看http://msdn.microsoft.com/en-us/library/ms143456.aspx使用具有正确编码的StreamReader。

HTH

马里奥

答案 1 :(得分:1)

如果您尝试读取以非Unicode编码保存的文件,则必须准确指定打开文件时该编码的内容。

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        using (StreamReader reader = new StreamReader(@"C:\myfile.txt", Encoding.GetEncoding(1252)))
        {
            // read the file with the reader object.
        }

    }
}

指定编码后,文件将在读取时自动转换为内部字符串格式(UTF-16 LE)。请注意,如果正确指定了编码,则将旧版字符编码中的有效文件转换为Unicode将始终成功,并且没有任何困难。以遗留编码保存文件更成问题,并且要求所有源字符映射到传统编码或适当的回退机制。

将来在整个系统中独占使用Unicode往往会使事情变得更容易。依赖于正确设置的默认系统编码会创建隐藏的配置依赖关系,这可能会在任何迁移,分布式应用程序和其他情况下导致问题。