首页新闻找找看学习计划

用form表单的enctype属性传输“流”信息,如何解决中文乱码问题

0
悬赏园豆:5 [待解决问题]

之前手写了一个文件上传的小程序,form的enctype设为:multipart/form-data,文件上传后(所选文件文件名为中文),在页面再查看,文件名就成乱码了,但是内容并没乱码

糖拌西红柿的主页 糖拌西红柿 | 菜鸟二级 | 园豆:203
提问于:2018-04-26 13:33
< >
分享
所有回答(7)
0

首先你的上传文件是不是在本地服务器www之类的目录下, 另外header头里面显示的编码是啥   如果是小程序,看看uploadfile的参数加上header: {“chartset”:”utf-8”}这个试试

河畔 | 园豆:723 (小虾三级) | 2018-04-26 13:46

这个是servlet写的

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-26 17:28
0

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这一段有没有。

隐语者 | 园豆:34 (初学一级) | 2018-04-26 14:42

有的

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-26 17:28
0

乱码问题,一般都是页面,配置编码不同,

参考:spring mvc 文件上传 - 2018 

不会摇头的风扇 | 园豆:420 (菜鸟二级) | 2018-04-26 15:16
0

这件事和 “文件上传“ 、”form“ 、”enctype设为:multipart/form-data”

没有毛线关系。

西漠以西 | 园豆:1670 (小虾三级) | 2018-04-26 15:30

怎么解决……

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-26 17:29
0

https://blog.csdn.net/zhouyingge1104/article/details/38322403 里面有

小光 | 园豆:1825 (小虾三级) | 2018-04-27 14:28

你获取文件名是用file.getOriginalFilename()吧

支持(0) 反对(0) 小光 | 园豆:1825 (小虾三级) | 2018-04-27 14:31

@小光: 不是

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-27 20:20

@糖拌西红柿: 用这个试试,这个是获取原文件名

支持(0) 反对(0) 小光 | 园豆:1825 (小虾三级) | 2018-04-28 09:05
0

这是因为电脑本身文件名的中文编码格式不是utf-8 但是你代码的编码格式却是utf-8 这就造成了编码格式不一致的问题 如果是英文的好像不会有这个问题(具体我忘记了)解决的方式就是代码格式的转变 好像电脑中文的文件名格式是gb2312吧 还是GBK啊 不是很记得了  你将它转为utf-8就可以了

风~停了 | 园豆:213 (菜鸟二级) | 2018-04-27 18:02

在哪里转啊?代码里?

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-27 20:20

@糖拌西红柿: 你的文件名不是输出的么,输出的时候将文件名的编码格式转一下,我知道php输出的时候有这个函数,我想js  或者 Java应该都有 毕竟语言都是相通的 你可以查一下

支持(0) 反对(0) 风~停了 | 园豆:213 (菜鸟二级) | 2018-04-27 20:57

@风~停了: 文件名倒是没输出,直接在流信息里切出来,用这个来命名服务器端新产生的文件名,然后再截取流文件中的其他内容,放置新文件内容中

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-27 21:07

@糖拌西红柿: 你在你截取文件名那里将编码转换一下不就好了么

支持(0) 反对(0) 风~停了 | 园豆:213 (菜鸟二级) | 2018-04-27 22:08

@风~停了: 嗯嗯,已经解决了,谢谢

支持(0) 反对(0) 糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-27 22:14
0

我自己在读取传至服务端的流文件,截取其中文件名字符串时使用了   “String filename = str.substring(beginIndex,endIndex);//截取文件名”  强行读取内容并转换为string,而其他内容则是用

while((n=randomfile.readByte()) != -1&&i <= 4)
{
if(n=='\n')
{
startext = randomfile.getFilePointer();
i++;
}
}

二进制形式直接写入,所以只有名字会乱码

糖拌西红柿 | 园豆:203 (菜鸟二级) | 2018-04-27 21:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册