Java Web文件下载2——文件下载乱码处理

这是我在导出excel文件供用户下载时遇到的:

流程:1、文件生成,文件全名名由路径加文件名构成,路径配置在数据库中动态读取,名称由时间加汉字构成。生成的文件将存放在数据库中配置的路径中2、前台页面显示出文件列表,点击下载,将文件名传到后台去,后台通过读取数据库配置的路径加上传过来的文件名去寻找该文件3、从指定文件中读取数据,设置相关信息,完成下载

中文乱码处理:1、生成文件系统的实体文件时,文件名不存放汉字,而是将文件名(不用包括路径)转成Unicode字符,即,使用URLEncoder.encode("文件名","UTF-8"),然后再去由该名称生成实体文件,当然这样的文件名在服务器上不解码是看不懂的,之所以这么做是为了防止有的服务器对中文编码不同,直接存放通用的Unicode码,解决后顾之忧。当然没有加密过的原来的文件名,也就是大家都认识的文件名还是要保存起来的,比如存到数据库中去,因为页面上显示的是要能看懂的!2、前台显示文件名列表,将要下载的文件名传到后台去。传之前要通过js进行加密操作,同样转换成unicode字符,传到后台之后,后台解密,可以得到正确的中文文件名称,不过此时得到的文件名没什么用,权当看一看文件名对不对吧!因为这时候通过这个文件全名来到服务器上读取文件肯定会报错的,FileNotFoundException,当然,因为你得先把它URLEncoder.encode("文件名","UTF-8"),也就是加密成Unicode码,然后拼上路径,这样才能在服务器中找到对应的文件!3、当然文件下载时用户看到的下载列表中你不能直接给Unicode码组成的文件名也不能是乱码,但是幸好,程序会自动处理这一点,你直接response.setHeader("Content-Disposition","attachment;filename="+fileName)就行,其中的fileName是Unicode码的文件名,浏览器会自动给你转换好的!

中文乱码问题太多了,而且很烦,一个很好的原则就是,不要讲中文名称存放到服务器上,而是用通用的字符代替,你如这里讲的Unicode字符,或者还有一种办法,通过自己定义一种规则,将中文映射成英文存放到服务器上,然后下载的时候再将英文映射成对应的中问,这个过程可以借助Map来做,这样也能很好的防止乱码问题!

没有人会帮你一辈子,所以你要奋斗一生。

Java Web文件下载2——文件下载乱码处理

相关文章:

你感兴趣的文章:

标签云: