日期:2014-05-17  浏览次数:21335 次

c# 编码转换问题
我想 实现的目的是把记事本中的 中文两格符号 "’"替换成 英文符号"'" 代码如下


  DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory + "\\test");
  FileInfo[] fiArr = di.GetFiles();
  MessageBox.Show("找到" + fiArr.Length.ToString() + "个文件");
  string strcomt;
  for (int i = 0; i < fiArr.Length; i++)
  {
  StreamReader sr = new StreamReader(Environment.CurrentDirectory + "\\test\\" + fiArr[i].Name);
  strcomt = sr.ReadToEnd().Replace("’", "'");
  sr.Close();
   

  StreamWriter sw1 = new StreamWriter(Environment.CurrentDirectory + "\\test\\spun\\" + fiArr[i].Name);
 
  sw1.WriteLine(strcomt);
  sw1.Close();

但是结果 新生成的 记事本中 无法显示 新的符号 变成了黑色小块。。。
我尝试把写入的 代码改为以下
StreamWriter sw1 = new StreamWriter(Environment.CurrentDirectory + "\\test\\spun\\" + fiArr[i].Name, false, System.Text.Encoding.Unicode);
StreamWriter sw1 = new StreamWriter(Environment.CurrentDirectory + "\\test\\spun\\" + fiArr[i].Name, false, System.Text.Encoding.UTF8);

都不行  

希望大家指点。。谢谢!

------解决方案--------------------
StreamReader读取文件时就需要指定一下编码格式,否则读出来的时候已经是错误的内容了。有没有打个断点看看读出来的内容对不对?

来自MSDN中的内容:
除非另外指定, StreamReader 的默认编码为 UTF-8,而不是当前系统的 ANSI 代码页。

对应的保存文件时也指定一下编码格式。


------解决方案--------------------
还有就是习惯使用Path.Combine来获取路径而不是自己使用字符串拼接路径,避免错误。如你的代码中当前目录(Environment.CurrentDirectory)是一个根目录时是不是后出现异常?