今天发现一个很奇怪的问题,我做一个静态页面的自动生成
但是很奇怪的是
先看代码:
StreamReader sr = new StreamReader(@"d:\ExamplePage\Region.htm", System.Text.Encoding.GetEncoding("gb2312"));
string strTemp = sr.ReadToEnd();
StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false);
sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));这个其实应该是比较简单的,但是有个问题很奇怪,
在sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"))这里,如果不用这个(System.Text.Encoding.GetEncoding("gb2312")),那么我创建新文件里面的就是乱码(不报错)。但是如果我用了,就会报错“输入字符串的格式不正确”。我找了半天原因,终于找到了原因出现在“{”,“}”这两个字符上。如果我源文件里面有这两个字符,那么在执行sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"))就会报错。这是为什么啊?
我Read出来的数据没问题,直接写入文本框都是没有问题的,就是写入文本文件不是报错就是乱码,真是奇怪!我在线等,谢谢

解决方案 »

  1.   

    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false);
    sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));
    StreamWrite.Write方法并没有这个重载,我不知道你是怎么编译通过的
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false,System.Text.Encoding.GetEncoding("gb2312"));
    sw.Write(strTemp);
      

  2.   

    你的用法是错误的,你自己看MSDN  Write方法没有这个重载
      

  3.   

    我感觉不应该和 “{”,“}” 这两个字符有关,你试验下utf-8编码
      

  4.   

    write的用法有17个,肯定有这个。
    而且不写在这个,写在
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false, System.Text.Encoding.GetEncoding("gb2312")); 
    这里,问题也有。
    我编译都通过了,不可能没有这个重载
    是这个符号的问题,我用ReadLine读了的我替换后这个符号就不出问题了
      

  5.   

    http://blog.csdn.net/ZZJ_4Ever/archive/2009/02/06/3866503.aspx
    你可以参考下,静态页面生成
      

  6.   

    你都是星级了,还自相矛盾?
    而且不写在这个,写在 
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false, System.Text.Encoding.GetEncoding("gb2312")); 
    我本来就是这个意思。你看清楚,我说的是Write方法没有你那个重载这是你的代码,
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false);
    sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));这还不是错的?
      

  7.   

      System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\1.TXT", System.Text.Encoding.GetEncoding("gb2312"));
                string strTemp = sr.ReadToEnd();
            
                System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\2.TXT", false);
                sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));
             
    没问题啊 
      

  8.   

    可能在编码的时候转换的问题. 我的TXT里只有123123123 
      

  9.   

    给你说了啊,你不要拿着我的Write不放,我写的是对的。有那个重载,你自己写一个看看
    我哪里又自相矛盾了,我不想就这个问题进行讨论。很奇怪的是,我原来写的web上的代码完全没有问题,但是移植到windows上就有问题了。我我换FileStream来写文件,就没有问题。不过还是没搞懂为什么StreamWriter会出错
      

  10.   

    如果没有那个重载,编译不可能通过的。提示里面有,编译也通过了,你就别老拿着我的那个write不放。
      

  11.   

    此人简直不可理喻!
    我已经给他说了三次了,他都舍不得去查。
    自己看吧:名称  说明  
    StreamWriter.Write (Boolean)  将 Boolean 值的文本表示形式写入文本流。  
    StreamWriter.Write (Char)  将字符写入流。 
    由 .NET Compact Framework 支持。 
     
    StreamWriter.Write (Char[])  将字符数组写入流。 
    由 .NET Compact Framework 支持。 
     
    StreamWriter.Write (Decimal)  将后面带有行结束符的十进制值的文本表示形式写入文本流。  
    StreamWriter.Write (Double)  将 8 字节浮点值的文本表示形式写入文本流。  
    StreamWriter.Write (Int32)  将 4 字节有符号整数的文本表示形式写入文本流。  
    StreamWriter.Write (Int64)  将 8 字节有符号整数的文本表示形式写入文本流。  
    StreamWriter.Write (Object)  通过在对象上调用 ToString 将此对象的文本表示形式写入文本流。  
    StreamWriter.Write (Single)  将 4 字节浮点值的文本表示形式写入文本流。  
    StreamWriter.Write (String)  将字符串写入流。 
    由 .NET Compact Framework 支持。 
     
    StreamWriter.Write (UInt32)  将 4 字节无符号整数的文本表示形式写入文本流。  
    StreamWriter.Write (UInt64)  将 8 字节无符号整数的文本表示形式写入文本流。  
    StreamWriter.Write (String, Object)  使用与 String.Format 相同的语义写出格式化的字符串。  
    StreamWriter.Write (String, Object[])  使用与 String.Format 相同的语义写出格式化的字符串。  
    StreamWriter.Write (Char[], Int32, Int32)  将字符的子数组写入流。 
    由 .NET Compact Framework 支持。 
     
    StreamWriter.Write (String, Object, Object)  使用与 String.Format 相同的语义写出格式化的字符串。  
    StreamWriter.Write (String, Object, Object, Object)  使用与 String.Format 相同的语义写出格式化的字符串。  并没有一个StreamWriter.Write(String,Encoding)这个重载
    所以实际上你调用的是
    StreamWriter.Write (String, Object)  使用与 String.Format 相同的语义写出格式化的字符串。
    这个方法!该方法把你传入的第二个参数当作格式字符串,而不是编码
    所以你虽然“指望”是GB2312编码,但实际上仍是默认的UTF8编码!我给你再三解释,你还说我拿这Write方法不放!
      

  12.   

    正确用法:
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false, System.Text.Encoding.GetEncoding("gb2312")); 
    sw.Write(strTemp);为什么你能编译通过?
    是因为:StreamWriter.Write(
            string format,
    Object arg0)
    参数
    format
    类型:System..::.String格式化字符串。arg0
    类型:System..::.Object要写入格式化字符串的对象StreamWriter.Write(
    string format,
    Object arg0,
    Object arg1
    )参数
    format
    类型:System..::.String格式化字符串。arg0
    类型:System..::.Object要写入格式化字符串的对象。arg1
    类型:System..::.Object要写入格式化字符串的对象。
      

  13.   

    你们不要光看文档,还有TextWriter你们自己写一个编译一下不就知道了吗?什么都要实践检验,你们自己写一个编译一下就知道了?
    上面有位兄弟也自己编译过了也说没问题,为什么你们老是搬个文档在那里说事,文档谁不会看啊?
      

  14.   


    sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312")); sw.Write(string format, Object arg0)  arg0 格式化字符的对象... 是否是 System.Text.Encoding.GetEncoding("gb2312") 呢?
      

  15.   

    My God!
    我对你彻底无语了!
    恕我无能,你这个智商,我无法给你解释清楚。
    自己验证吧:
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false);
    sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));//把文件改成txt文件,比如c:\a.txt
    然后打开这个文件,点文件菜单中的另存为命令,弹出一个对话框,看编码是ANSI,还是UTF8
    只要你“稍微”有一点常识,就知道不可能有这样的重载,因为每个文本文件都有一个编码,照你那样的话:
    StreamWriter sw...
    string str="Hello,中国";
    sw.Write(str,Encoding.UTF8);
    sw.Write(str,Encoding.GetEncoding("gb2312"));
    sw.Write(str,Encoding.Unicode);
    那我这样,这个文件岂不是有多个编码?我不敢说你是CSDN上最菜的鸟,但是肯定是所有等级达到星级中最菜的了
    鉴定完毕!
      

  16.   

    我不知道你自己编译过没有string str="Hello,中国"; 
    sw.Write(str,Encoding.UTF8); 
    sw.Write(str,Encoding.GetEncoding("gb2312")); 
    sw.Write(str,Encoding.Unicode); 
    上面这种写有什么错,我的理解就是,以Encoding.UTF8(或gb2312)现在的这种编码写入文件,有什么不行的
    你刚才的代码实现的结果最多就是文本文件里面有三段,每一段的编码不一样,但是只能一种正常显示,其它的两种都是乱码。我一直对你比较客气,你自己去编译了之后再说。如果再有问题,麻烦你去重新发一个帖讨论,讨论完后过来给我说结果
      

  17.   

    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", false, System.Text.Encoding.GetEncoding("gb2312"));
    sw.Write(strTemp);
      

  18.   

    你这个sw.Write(strTemp, System.Text.Encoding.GetEncoding("gb2312"));其实是用的StreamWriter.Write(String, Object)你应该用
    StreamWriter sw = new StreamWriter(@"d:\TempPage\2.htm", System.Text.Encoding.GetEncoding("gb2312"));
    sw.Write(strTemp);