C# 为什么IE(8)显示错误的文件名?创建文件时

C# 为什么IE(8)显示错误的文件名?创建文件时,c#,asp.net,file,internet-explorer,web,C#,Asp.net,File,Internet Explorer,Web,我写了这个程序,但在一些borwser(如IE8)中不起作用 **为什么IE8显示错误的文件名?**换句话说,它将更改为unicode名称 当使用显式名称时,其工作正常,但当我使用文件名时,其工作不正常 我找到了我的源代码 请帮帮我 非常感谢 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title

我写了这个程序,但在一些borwser(如IE8)中不起作用 **为什么IE8显示错误的文件名?**换句话说,它将更改为unicode名称

当使用显式名称时,其工作正常,但当我使用文件名时,其工作不正常 我找到了我的源代码

请帮帮我 非常感谢

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:FileUpload ID="FileUpload1" runat="server" />
            <hr />
            <asp:Button ID="btnEncrypt" Text="Encrypt File" runat="server" OnClick="EncryptFile" />
            <asp:Button ID="btnDecrypt" Text="Decrypt File" runat="server" OnClick="DecryptFile" />
            <br />

            <input type="submit" value="ersal" name="test" />
        </div>
    </form>
</body>
</html>



C# code is Here





  protected void EncryptFile(object sender, EventArgs e)
    {
        //Get the Input File Name and Extension.
        string fileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName);
        string fileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName);

        //Build the File Path for the original (input) and the encrypted (output) file.
        string input = Server.MapPath("~/Files/") + fileName + fileExtension;
        string output = Server.MapPath("~/Files/") + fileName + "_enc" + fileExtension;

        //Save the Input File, Encrypt it and save the encrypted file in output path.
        FileUpload1.SaveAs(input);
        this.Encrypt(input, output);

        ////Download the Encrypted File.
        Response.ContentType = FileUpload1.PostedFile.ContentType;
        Response.Clear();
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(output));
        Response.WriteFile(output);
        Response.Flush();

        //Delete the original (input) and the encrypted (output) file.
        File.Delete(input);
        File.Delete(output);

        Response.End();
    }
    private void Encrypt(string inputFilePath, string outputfilePath)
    {
        string EncryptionKey = "A";
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (FileStream fsOutput = new FileStream(outputfilePath, FileMode.Create))
            {
                using (CryptoStream cs = new CryptoStream(fsOutput, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    using (FileStream fsInput = new FileStream(inputFilePath, FileMode.Open))
                    {
                        int data;
                        while ((data = fsInput.ReadByte()) != -1)
                        {
                            cs.WriteByte((byte)data);
                        }
                    }
                }
            }
        }
    }


    protected void DecryptFile(object sender, EventArgs e)
    {
        //Get the Input File Name and Extension
        string fileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName);
        string fileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName);

        //Build the File Path for the original (input) and the decrypted (output) file
        string input = Server.MapPath("~/Files/") + fileName + fileExtension;
        string output = Server.MapPath("~/Files/") + fileName + "_dec" + fileExtension;

        //Save the Input File, Decrypt it and save the decrypted file in output path.
        FileUpload1.SaveAs(input);
        this.Decrypt(input, output);

        //Download the Decrypted File.
        Response.Clear();
        Response.ContentType = FileUpload1.PostedFile.ContentType;
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(output));
        Response.WriteFile(output,false);

        Response.Flush();

        //Delete the original (input) and the decrypted (output) file.
        File.Delete(input);
        File.Delete(output);

        Response.End();
    }
    private void Decrypt(string inputFilePath, string outputfilePath)
    {
        string EncryptionKey = "A";
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (FileStream fsInput = new FileStream(inputFilePath, FileMode.Open))
            {
                using (CryptoStream cs = new CryptoStream(fsInput, encryptor.CreateDecryptor(), CryptoStreamMode.Read))
                {
                    using (FileStream fsOutput = new FileStream(outputfilePath, FileMode.Create))
                    {
                        int data;
                        while ((data = cs.ReadByte()) != -1)
                        {
                            fsOutput.WriteByte((byte)data);
                        }
                    }
                }
            }
        }
    } 

只有铬显示正确的结果

问题在于Internet Explorer处理包含Unicode字符的文件名与其他浏览器(如Chrome)不同。不幸的是,没有直接的跨浏览器解决方案

我们已使用此问题中讨论的解决方案解决了此问题: