无法在c#中使用Streamreader读取特殊字符“£”

时间:2014-03-28 14:42:01

标签: c# encoding

我正在尝试使用以下代码从文本文件中读取字符(£)。

public static List<string> ReadAllLines(string path, bool discardEmptyLines, bool doTrim) 
{
   var retVal = new List<string>();
   if (string.IsNullOrEmpty(path) || !File.Exists(path)) {
        Comm.File.Log.LogError("ReadAllLines", string.Format("Could not load file: {0}", path));
            return retVal;
   }

   //StreamReader sr = null;
   StreamReader sr = new StreamReader(path, Encoding.Default));

   try {
     sr = File.OpenText(path);

     while (sr.Peek() >= 0) {
         var line = sr.ReadLine();

         if (discardEmptyLines && (line == null || string.IsNullOrEmpty(line.Trim()))) {
            continue;
         }

         if (line != null) {
            retVal.Add(doTrim ? line.Trim() : line);
         }
      }
   } 
   catch (Exception ex) {
            Comm.File.Log.LogGeneralException("ReadAllLines", ex);
   }
   finally {
      if (sr != null) {
           sr.Close();
      }
   }

   return retVal;
}

但是我的代码没有正确阅读£,正在阅读该字符请指导我需要做些什么来阅读特殊字符。

提前致谢。

4 个答案:

答案 0 :(得分:1)

您正在阅读的文件编码与Encoding.Default的编码不同。它可能是UTF-8。尝试将UTF-8用于此特定文件。有关更多通用用法,请参阅Determining the Encoding of a text file

答案 1 :(得分:0)

看起来像编码问题。尝试使用UTF-8(或Unicode)编码而不是默认编码来创建StreamReader

StreamReader sr = new StreamReader(path, Encoding.UTF8));

答案 2 :(得分:0)

尝试将Encoding.Default替换为Encoding.GetEncoding(437)

答案 3 :(得分:0)

可以通过两种方式向流阅读器提供编码信息。

1)使用另存为选项保存文件,然后从Windows下拉列表中选择相应的编码选项。 see screenshot 2)如果您的文件本质上是动态的,请使用带有StreamReader的Encoding.GetEncoding()