C# 编码问题

C# 编码问题,c#,encoding,C#,Encoding,我在编码方面遇到了一个大问题。我正在使用的代码应该可以工作,但它不能 代码如下: FileStream fs = new FileStream(saveFile, FileMode.Create, FileAccess.Write, FileShare.None); System.IO.StreamWriter objWriter; objWriter = new System.IO.StreamWriter(fs , Encoding.Unicode); string textLine; i

我在编码方面遇到了一个大问题。我正在使用的代码应该可以工作,但它不能

代码如下:

FileStream fs = new FileStream(saveFile, FileMode.Create, FileAccess.Write, FileShare.None);

System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(fs , Encoding.Unicode);
string textLine;
if (System.IO.File.Exists(readFile) == true)
{
    System.IO.StreamReader objReader;
    objReader = new System.IO.StreamReader(readFile, Encoding.Unicode);

    do 
    {
        textLine = objReader.ReadLine();
        if (textLine.IndexOf(searchString) != -1)
        {
            tempString = textLine;
            position1 = textLine.IndexOf(searchString);

            tempString = textLine.Substring(position1);
            if (tempString.IndexOf("(") != -1)
            {
                position2 = tempString.IndexOf("(");
                //MessageBox.Show(tempString.Length.ToString());
                tempString = tempString.Substring(0, position2);
            }
        }

        objWriter.WriteLine(textLine);
    } while (objReader.Peek() != -1);
}
objWriter.Close();
MessageBox.Show(tempString);
MessageBox.Show("Done!");

我必须读取一个混合了英文字符和一些西里尔字母的文件,但在读取和处理该文件后,当我试图将该文件保存到新位置时,所有西里尔字母符号都是“?”或其他未知符号。我尝试了所有可能的编码,但它不起作用

如果您不确定输入文件的编码,请不要指定它,让
StreamReader
执行检查

我怀疑您的源文件不是Unicode,而是使用本地Windows编码

创建一个全新的文件,不要在读卡器中指定任何编码

objReader = new System.IO.StreamReader(readFile); 

如果您不确定输入文件的编码,请不要指定它,让
StreamReader
实现检查

我怀疑您的源文件不是Unicode,而是使用本地Windows编码

创建一个全新的文件,不要在读卡器中指定任何编码

objReader = new System.IO.StreamReader(readFile); 

从您发布的示例来看,文件似乎没有BOM表,但它包含西里尔字母。没有BOM,
StreamReader
无法猜出正确的编码。因此,您可以假设编码,因为文件包含西里尔字符(根据您在注释部分中显示的十六进制转储)

下面是您可以尝试的:

using (var reader = new StreamReader("input.txt", Encoding.GetEncoding("Windows-1251")))
using (var writer = new StreamWriter("output.txt", false, Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        // reading the input file line by line ...
        // perform the parsing and write to the UTF-8 output encoded file
        writer.WriteLine(line);
    }
}

从您发布的示例来看,文件似乎没有BOM表,但它包含西里尔字母。没有BOM,
StreamReader
无法猜出正确的编码。因此,您可以假设编码,因为文件包含西里尔字符(根据您在注释部分中显示的十六进制转储)

下面是您可以尝试的:

using (var reader = new StreamReader("input.txt", Encoding.GetEncoding("Windows-1251")))
using (var writer = new StreamWriter("output.txt", false, Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        // reading the input file line by line ...
        // perform the parsing and write to the UTF-8 output encoded file
        writer.WriteLine(line);
    }
}

'此属性返回的Unicode编码对象可能没有适合您的应用程序的行为。它使用替换回退将无法编码的每个字符串和无法解码的每个字节替换为问号(“?”)字符你确定你正在读取的输入文件是用Unicode编码的吗?不,我不确定,但我也测试了所有其他编码,结果是一样的。你真的尝试了所有140种编码吗?发布显示文件内容的十六进制查看器的屏幕截图。文本为gibrish。。。这就是它:阿斯达Фааааааааааааааааафаф;通过此属性返回的UnicodeEncoding对象可能没有适合您的应用程序的行为。它使用替换回退将无法编码的每个字符串和无法解码的每个字节替换为问号(“?”)字符你确定你正在读取的输入文件是用Unicode编码的吗?不,我不确定,但我也测试了所有其他编码,结果是一样的。你真的尝试了所有140种编码吗?发布显示文件内容的十六进制查看器的屏幕截图。文本为gibrish。。。这就是它:阿斯达Фааааааааааааааааафаф;一开始我就是这么做的,但因为它不起作用,所以我尝试了编码,我测试了所有可能的标准编码和所有可能的cyrylic编码,结果都是一样的。我不知道该怎么办。也许你的源文件有一个BOM表,但内容不是UTF?!?源文件的编码是什么?如果您使用记事本创建一个全新的文件,并且没有指定任何编码,那么它应该可以工作。FileStream从不猜测编码,它只使用字节。我一开始就这么做了,但由于它不起作用,这就是我尝试编码的原因,我测试了所有可能的标准编码和所有可能的cyrylic编码,结果是一样的。我不知道该怎么办。也许你的源文件有一个BOM表,但内容不是UTF?!?源文件的编码是什么?如果您使用记事本创建一个全新的文件,并且没有指定任何编码,那么它应该可以工作。FileStream永远不会猜测编码,它只对字节工作。