不可能有ASCII编码的中文的。
你获取byte[]的时候不应该用ascii编码。要用Encoding.GetEncoding("GB18030")
你写文本的时候为什么要用ascii编码呢,需要在网络上传输,避免乱码?
如果只是能用写字板打开的话 ,可以直接写中文的string,不过在写的时候文件流要用
Encoding.GetEncoding("GB18030")来作为编码格式。

解决方案 »

  1.   

    To : eradium(雷电)
    改成这样吗?
    Byte[] encodedBytes = Encoding.GetEncoding("GB18030").GetBytes(str.ToString());
    char[] decoded = Encoding.GetEncoding("GB18030").GetChars(encodedBytes);
    str = str.Remove(0,str.Length);
    str = str.Append(decoded);
    string txt = str.ToString();我要把文件发给另一家公司的软件去读取,该软件只能读取纯文本.
      

  2.   

    我的困惑在于,如何让每个汉字在.NET也是两个字符.比如为了让数据库里的列值"深圳"在.NET里有12位
    txt = dr["列名"].ToString().Trim().PadRight(12);//本来我要的是"深圳        ",但实际上得到的是"深圳          ",因为.NET把每个汉字算作1个字符,所以在后面加了10个空格.当我
    tw = new StreamWriter(fileName,false,System.Text.Encoding.GetEncoding("GB2312"));
    tw.Write(txt); //写入文本文件后,该段内容就比规定的长了两个字符,对方的软件就不能正确读取了.
    我的解决方法是,把数据库里的12位varchar改成12为char,然后
    txt = dr["列名"].ToString(),不做去掉空格再补足12位,虽然我的问题解决,但不是根本之道,困惑依旧,请高人解惑!
      

  3.   

    搞了半天,才搞清楚你的要求是在文本文件中写指定的字符长度.
    string类型本身在.net里面是不存在编码转换的。
    要转换也是在byte[],char[],和string之间转换。
    所以转换成byte再转换回string是没意义的。
    实在是要指定长度的话,可以:
    string txt=dr["列名"].ToString().Trim();
    Byte[] encodedBytes = Encoding.GetEncoding("GB18030").GetBytes(txt);
    Byte[] writeBytes = new Byte[12];
    encodedBytes.CopyTo(writeBytes,0);
    for(int i=encodedBytes.Length;i<12;i++)
    {
       writeBytes[i]=(byte)' ';
    }
    FileStream tw= new FileStream("output.txt",FileMode.OpenOrCreate);
    tw.Write(writeBytes,0,12);
    tw.Close();
    这样就可以控制实际的字符长度了。
      

  4.   

    To;eradium(雷电)
    醍醐灌顶,怎样给分?
      

  5.   

    To;eradium(雷电)  
    我在管理里面已经给你送了10分,但是怎么看不到呢?
      

  6.   

    To;eradium(雷电)  
    我在管理里面已经给你送了10分,但是怎么看不到呢?