我做了一个实验,希望将一个“课程表.rar”进行编码,使用下面的形式  string filename=file.FileName.Substring(0,file.FileName.Length-3);
            string fileext=file.FileName.Substring(file.FileName.Length-3,3);
            byte[] sourcebytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(filename);           
            string UTF8string = System.Text.Encoding.UTF8.GetString(sourcebytes);
            string finalFileName = UTF8string + fileext;            file.SaveAs(strUploadPath + finalFileName);
显示finalFileName结果是“课程�?”,一次执行到file.saveas时报“路径中具有非法字符”,这是什么原因

解决方案 »

  1.   

    文件名不用转换的,.Net的字符串默认就是用的utf-8编码
      

  2.   

    byte[] sourcebytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(filename);
    string UTF8string = System.Text.Encoding.UTF8.GetString(sourcebytes);
    编码和解码的字符编码要保持一致。另外:file.Extension就是文件扩展名。
    或者string[] names = file.Name.Split('.');
    names[0]:文件名
    names[1]:扩展名
    这样比截取要好一点,万一扩展名不是3位呢?
      

  3.   

                string testStr = "ABC";
                byte[] buffer = Encoding.GetEncoding("gb2312").GetBytes(testStr);
                buffer = Encoding.Convert(Encoding.GetEncoding("gb2312"), Encoding.UTF8, buffer);
                Console.WriteLine(Encoding.UTF8.GetString(buffer));
    转换编码使用Encoding.Convert();
    如楼上所说,一般是不用转换的。
      

  4.   

    问题是如果不编码,连"课程"两字都是乱码,而且执行到file.saveas时报“路径中具有非法字符”,我就是仅为这个原因,所以才使用编码的。如果如楼上给位所说,如果不转换,我将其插入数据库时得到的是一堆乱码,对外提取显示时依然是这些乱码,
      

  5.   

    保存的时候可以 file.SaveAs(strUploadPath + "课程表.rar");
      

  6.   

    另外断点看一下你的 strUploadPath  路径是不是本地路径
      

  7.   

    对了,应该这么跟大家解释,我用了Uploadify 组件进行多文件上传,但是上传时支持汉字,总是将汉字转换成乱码,所以我才使用的上面的转换,但每次只能转化出最前前面的几个汉字,扩展名之前的那个汉字依然是乱码,
      string filename=file.FileName.Substring(0,file.FileName.Length-3);
                 string fileext=file.FileName.Substring(file.FileName.Length-3,3);
                 byte[] sourcebytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(filename);
     
               
                 string UTF8string = System.Text.Encoding.UTF8.GetString(sourcebytes);
                 string finalFileName = UTF8string + fileext;to:haukwong 
    考虑到时客户用,一般上传的都是三位后缀的文件,况且用split文件名中可能依然存在这个分隔字符
      

  8.   

    to:xiangmei521 
    我这文件名是动态的
      

  9.   


    动态命名是为了防止重名还是?可以考虑用时间戳来命名,这样全是数字也不存在编码的问题如果提交到后台,中文都是乱码,可以考虑前台提交之前用js编码,然后后台收到后解码如果后台收到是中文没有乱码,存入数据库中,中文乱码,有可能是数据库的编码问题另外建议断点查看strUploadPath 路径中是否有非法字符