编码问题
本文关键字:问题 编码 | 更新日期: 2023-09-27 18:12:34
我有一个编码的大问题。我使用的代码应该工作,但它没有!
代码如下:
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!");
我必须读取一个混合了英文字符和一些西里尔字符的文件,但是在读取和处理文件之后,当我试图将文件保存到一个新的位置时,所有的西里尔符号都是"?"或其他一些未知的符号。我尝试了所有可能的编码,它不工作!
从您发布的示例来看,该文件似乎没有BOM,但它包含西里尔字符。没有BOM, StreamReader
不能猜测正确的编码。因此,您可以假设使用Windows-1251编码,因为该文件包含西里尔字符(根据您在注释部分中显示的HEX转储)。
你可以这样做:
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);
}
}
如果您不确定输入文件的编码,请不要指定它,让StreamReader
实现检查。
我怀疑你的源文件不是Unicode
,而是使用你的本地Windows编码。
创建一个全新的文件,不要在读取器中指定任何编码。
objReader = new System.IO.StreamReader(readFile);