之前手写了一个文件上传的小程序,form的enctype设为:multipart/form-data,文件上传后(所选文件文件名为中文),在页面再查看,文件名就成乱码了,但是内容并没乱码
首先你的上传文件是不是在本地服务器www之类的目录下, 另外header头里面显示的编码是啥 如果是小程序,看看uploadfile的参数加上header: {“chartset”:”utf-8”}这个试试
这个是servlet写的
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
这一段有没有。
有的
这件事和 “文件上传“ 、”form“ 、”enctype设为:multipart/form-data”
没有毛线关系。
怎么解决……
https://blog.csdn.net/zhouyingge1104/article/details/38322403 里面有
你获取文件名是用file.getOriginalFilename()吧
@小光: 不是
@糖拌西红柿: 用这个试试,这个是获取原文件名
这是因为电脑本身文件名的中文编码格式不是utf-8 但是你代码的编码格式却是utf-8 这就造成了编码格式不一致的问题 如果是英文的好像不会有这个问题(具体我忘记了)解决的方式就是代码格式的转变 好像电脑中文的文件名格式是gb2312吧 还是GBK啊 不是很记得了 你将它转为utf-8就可以了
在哪里转啊?代码里?
@糖拌西红柿: 你的文件名不是输出的么,输出的时候将文件名的编码格式转一下,我知道php输出的时候有这个函数,我想js 或者 Java应该都有 毕竟语言都是相通的 你可以查一下
@风~停了: 文件名倒是没输出,直接在流信息里切出来,用这个来命名服务器端新产生的文件名,然后再截取流文件中的其他内容,放置新文件内容中
@糖拌西红柿: 你在你截取文件名那里将编码转换一下不就好了么
@风~停了: 嗯嗯,已经解决了,谢谢
我自己在读取传至服务端的流文件,截取其中文件名字符串时使用了 “String filename = str.substring(beginIndex,endIndex);//截取文件名” 强行读取内容并转换为string,而其他内容则是用
while((n=randomfile.readByte()) != -1&&i <= 4)
{
if(n=='\n')
{
startext = randomfile.getFilePointer();
i++;
}
}
二进制形式直接写入,所以只有名字会乱码