一个文件(.txt/.htm),保存时的编码是ASCII格式,但是在C#中用
StramReader sr = new StreamReader(fileLocation, Encoding.ASCII);
sr.ReadToEnd()取出来的data却是乱码,如果用Encoding.Default,就显示正常.我看过了Encoding.Default是"ISO-8859-1"类型,为什么保存时是用的ASCII,却要用ISO-88598-1去打开才能显示正常呢?

解决方案 »

  1.   

    Encoding.Default一定是ISO-8859-1吗?
    这是按当前系统获取的.
      

  2.   

    是,我明白Default是按系统获取的,
    但为什么我save 的时候设置文件的编码是ASCII,却用 Encoding.ASCII打开是乱码呢?
      

  3.   

    那有没有什么解决方法呢?
    我就担心如果其他人的xp(比如他的SYSTEM是英文,或其他语言的)下create 的file,save的时候编码是选择的ASCII,然后copy到另一台机器,而这一台机器的SYSTEM是中文的.会不会出问题?
      

  4.   

    建议统一一下~~~
    都用UTF-8呗
      

  5.   

    其他地方都是用的ASCII编码.要改似乎不大可能,牵一发而动全身.
    还有没有其他解决方法?    :(
      

  6.   

    ASCII编码是做为英文的字母及符号的编码方式,字符编码为单个的 7 位 ASCII 字符。此编码仅支持 U+0000 和 U+007F 之间的字符值。
    保存时汉字转换的字节成为单字节,读取时汉字对应的双字节编码不全(识别为 U+0000 和 U+007F 之间的字符值),因而是乱码.
    如果你用ASCII编码来写文件,那么就存在这个问题,除了统一编码为Unicode或UTF-8没有办法
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  7.   

    那为什么用ISO-8859-1又可以读出来呢?
      

  8.   

    你存的文本估计是中文,如果是英文读出来没问题,如果是中文的话,那么ASCII码根本不可能读成中文,而且中文在文本文件中存成ASCII的话,你打开文本文件本身也是乱码。
      

  9.   

    这个是代码,你运行后打开文本文件看看是什么吧.
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    namespace consolepro
    {
        public class MyClass
        {
            public static void Main()
            {
                FileStream fs = new FileStream("C:\\myfile.txt", FileMode.Create);            StreamWriter writer = new StreamWriter(fs, Encoding.ASCII);
                writer.WriteLine("什么");
                writer.Close();
                fs.Close();
                FileStream fa = new FileStream("C:\\myfile.txt", FileMode.Open);
                StreamReader reader = new StreamReader(fa,Encoding.ASCII);
                string temp = reader.ReadToEnd();
                reader.Close();
                Console.WriteLine(temp);
                fs.Close();
                Console.ReadKey();
            }
        }
    }