asp.net 上传文件时,文件名称乱码的问题,急! 急! 急!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 上传文件时,文件名称乱码的问题,急! 急! 急!相关的知识,希望对你有一定的参考价值。

string path = Server.MapPath("EXUpLoadFile/");
if (!Directory.Exists(path))

Directory.CreateDirectory(path);


HttpPostedFile file = Request.Files["Filedata"];
if (file != null && file.ContentLength > 0)

file.SaveAs(path +Request.Form["FileName"]);


编码解码都试了。但是这个乱码问题是在项目框架下出的,单独建个项目就没事,但是放在项目中就乱码。webconfig的设置:
<globalization requestEncoding="GB2312" responseEncoding="GB2312" culture="zh-CN" fileEncoding="GB2312"/>
求解。在线等,你的方法如果好用我一定追分。
编码解码都试了。但是这个乱码问题是在项目框架下出的,单独建个项目就没事,但是放在项目中就乱码。放在项目框架下单独运行还是一样乱码。就得单独创建个项目才不是乱码。

参考技术A 你在web.config中设置了编码格式,那么在当前页面的html中,在设置一下编码格式:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
参考技术B context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";

试一下吧!
参考技术C 解码使用Server.UrlEncode, 而不是HttpUtility.UrlDecode追问

解码就不用说了,我解过哦了,编码解码都试了。但是这个乱码问题是在项目框架下出的,单独建个项目就没事,但是放在项目中就乱码

追答

web.config 不要加

还是乱码?

追问

再追你一条。。去了项目别的字体怎么办?加个webconfig就ok了

追答

其实utf-8是最保险的,限制了字符集反而会出问题

本回答被提问者采纳
参考技术D utf-8追问

试过了

追答

单独建个文件夹,文件夹里建一个web.config 试试吧

新的 dll 文件上传到 bin 文件夹后的 ASP.NET 运行时错误

【中文标题】新的 dll 文件上传到 bin 文件夹后的 ASP.NET 运行时错误【英文标题】:ASP.NET runtime error after new dll files uploaded into bin folder 【发布时间】:2021-12-25 05:18:09 【问题描述】:

我尝试将新的 dll 文件添加到 asp.net Web 应用程序 bin 文件夹中,并且每次遇到运行时错误。另外,我认为该请求指向其他 web.config 文件,因为当出现运行时错误时,由于 customErros 模式未关闭,因此无法显示任何错误详细信息的信息。这不是真的,因为我将 customErrors 模式设置为关闭并且已经检查了它在应用程序运行时是否正常工作。 ASP.NET 版本是旧版本 - 2.0,不知道 IIS 是什么版本,它是共享主机。出现错误后,我正在删除最后添加的 dll 文件,以便应用程序再次运行。所以现在我无法添加任何新的 dll 库,因为这个运行时错误。任何想法如何解决它?

【问题讨论】:

如果没有详细的错误信息就很难解决问题。我认为您必须尝试做的第一件事就是找到错误消息。您的问题是在您将其部署到 iis 后才出现的吗? 【参考方案1】:

一般来说,您永远不会真的想将 bin 文件放入 bin 文件夹中。

如果你做了一个干净的项目(通常可能会这样做),那么 bin 文件就会被清空。如果您需要包含一些附加程序集,请在项目中正确引用它们。然后在构建时,它们将被正确洗牌并正确包含在 bin 文件夹中。

您真的不想将一些 bin 文件放入 bin 文件夹,然后尝试引用这些程序集,因为如上所述,bin 文件夹可以在解决方案的重建过程中被清除。因此,将这些 bin 文件添加为对项目的引用。

另一个问题是在网络发布期间,您可以选择将所有 .dll 文件“合并”到一个程序集中,因此 bin 文件夹再次被视为项目构建的结果输出 - 而不是某个 repostitoty 位置您开始在其中放入 .dll 等。

我似乎有些人试图将 bin 文件放入 bin 文件夹,但你只会遇到问题,因为如前所述,尝试这样做时会出现多个问题。

我的意思是,想想 nuGet 添加?它在项目文件夹中创建一个名为“packages”的文件夹。而且您不会认为此文件夹不会出现在项目文件夹中 - 但您不会开车,因为如果您检查引用,您会看到许多 .dll 引用的 Hodge Podge 将指向该包文件夹。在构建时,.net 和编译过程会确定需要哪些 .dll,然后将它们打乱并放入 bin 文件中。

那么,如果您需要一些 .dll?在项目级别创建一个文件夹,将它们放入,然后将引用添加到您的项目中——它们将被正确链接、解析并在构建时成为您项目的一部分。然后,该构建过程将通过正确引用 bin 文件夹进行复制。

请勿尝试将其设为手动过程。您只需要在项目中添加 + 引用正确的程序集 - 并且 bin 文件夹不是引用此类文件的位置。

我想唯一的例外是如果您的代码在运行时通过说 Assembly.LoadFrom() 加载程序集 (.dll)。

即便如此,您仍然可以在项目中创建一个文件夹(并添加这些文件),并将构建时的副本包含到 bin 文件中。

编辑:

例如,我正在使用 ajax 工具包。所以,在项目探索中我看到了这个:

如果我右键单击 ajaxtool 工具包,显示属性表,我们会看到:

看看那个长长的可怕路径名——绝对 100% 在这个网站之外。但是,通过本地复制,当然在构建过程中,那个 .dll 会被复制到 bin 文件夹中。

上面说的同样适用于 newtonsoft (json),同样,它在网站之外。

因此,那些引用的程序集应该被复制到输出(bin)文件夹中。

但是,您可能使用的是网站而不是网站应用程序。 (你只是打开网站(因此:一个网站)。

或者, 您是否打开一个项目 (sln) 文件,从而拥有一个 asp.net 网站应用程序。 (关键区别在于网站与网站应用程序)。

但是,在这两种情况下,.dll 都应该并且确实在构建期间被复制到输出文件中。但是,如果您只使用一个网站,那么您就没有同样意义上的构建过程。在这种情况下,您可以考虑使用 app_code。

我的意思是,我可以假设将 .dll 放入 bin 中,然后引用它们,但是当你第一次做一个干净的项目时,这会分崩离析——因为 bin 文件夹应该被认为是“临时的”在开发过程中。

【讨论】:

这是一个很好的建议,但可能我的知识很差,无法以新的方式管理它。具体来说,我是这样做的:我使用 nuget manager 并在我的 PC 上的项目中本地安装库。所以nuget manager自动将dll放入bin。当我看到新文件时,我只是将它们复制到服务器上的 bin 文件夹中。 当我提出您的建议时,我会创建另一个名为 BinPackages 的文件夹并将新库复制到其中。接下来,我通过网站->添加引用->浏览添加了对项目的引用。但是路径是本地的,所以它不会在服务器中工作。那么如何“移动”对服务器的引用呢?或者也许有什么方法可以在服务器端引用? 构建时,.dll 应该复制到 bin 文件夹。所有引用的 .dll,无论它们存在于何处,都应因此被复制到 bin 文件夹中。但是,听起来您有一个网站,而不是一个网站应用程序。请参阅我上面的编辑 - 我显示了一个屏幕截图。您可能没有“复制本地”设置? 非常感谢您的耐心等待。你是对的,它是网站,而不是网络应用程序,我在树参考中看不到,我无法检查屏幕上的属性,也没有 copy local 设置,.我也在使用 AjaxControlToolkit 和其他库。我尝试通过添加引用和构建过程来添加 ClosedXML 库,并且在将 dll 从 Bin 文件夹复制到服务器之后,但只有本地我能够在代码中使用它。通常我不使用构建过程,只是在开发PC上更改代码并将文件上传到服务器。 正如你所建议的,我也可以使用 App_Code(那里的类很少)但是当我查看 github 上的源代码时,我不确定应该使用哪些文件(尤其是当我使用VB,只有CS,但没关系)。但是 bin 中的 dll 应该可以正常工作。

以上是关于asp.net 上传文件时,文件名称乱码的问题,急! 急! 急!的主要内容,如果未能解决你的问题,请参考以下文章

在Visual Studio 2010中关于asp.net的验证码登录调试时界面出现乱码怎么回事?急!!!

[ASP.NET][C#]下载文件时中文文件名出现乱码

有哪位高手知道ASP.NET中用C#怎样怎样实现文件上传

ASP.NET MVC 获取带有用户 ID 的文件上传名称并应用于单独的字段

ASP.NET上传控件上传图片

从文件读入数据再显示出来出现乱码(急,当天解决)