我的编码问题很严重。我正在使用的代码应该可以工作,但事实并非如此!
以下是代码:
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!");
我必须阅读一个混合英文字符和一些西里尔字符的文件,但在阅读和处理文件后,当我尝试将文件保存到新位置时,所有的cyrilic符号都是“?”或其他一些未知的符号。我尝试了所有可能的编码,它不起作用!
答案 0 :(得分:4)
从您发布的示例来看,该文件似乎没有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);
}
}
答案 1 :(得分:1)
如果您不确定输入文件的编码,请不要指定它,让StreamReader
实现检查。
我怀疑您的源文件不是Unicode
,而是使用本地Windows编码。
制作一个全新的文件,不要在阅读器中指定任何编码。
objReader = new System.IO.StreamReader(readFile);