本来是对另一个问题的情况补充(见http://topic.csdn.net/u/20110322/20/a56356ce-bc1c-490b-b847-546a952135ee.html)可是受到“同一用户,只能连续发贴3次”的限制,不得不再开一贴,——强烈希望CSDN改进规则。
————————————————————————
用下面的代码只能读出VS2008下建立的文本文件即(UTF8-带签名)的编码格式,读记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,中文主会变成乱码。
 using (StreamReader sr = new StreamReader(文件名))
  {
  SQLCode = sr.ReadToEnd();
  }
——————————————————————————————
用下面的代码可以正确地读出记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,而读VS2008下建立的文本文件即(UTF8-带签名)的编码格式,其他位置没事,第一个字符无论如何都会变成乱码,或者有一个不可打印的字符。
  Encoding defaultEncode = Encoding.UTF8;//.ASCII;//.Unicode;
  byte[] bytes = File.ReadAllBytes(FileName); //unicode.GetBytes(unicodeString);
  char[] strChars = new char[defaultEncode.GetCharCount(bytes, 0, bytes.Length)];
  defaultEncode.GetChars(bytes, 0, bytes.Length, strChars, 0);  SQLCode = defaultEncode.GetString(bytes);
——————————————————————————————
因为看资料说(UTF8-带签名)的文本,前面有3个字节的BOM,所以将代码修改如下,想去除前面三个字节
int beginIndex = 3;
  defaultEncode.GetChars(bytes, beginIndex, bytes.Length-begionIndex, strChars, 0);
可是读出来的文本,第一字符的乱码情况仍无法解决。