我正在将文件上传到服务器.文件上载HTML表单有2个字段:
提交表单时,将正确接收文件内容.但是,当读取文件名(上面的第1点)时,它会出现乱码.ASCII字符正确显示.如果用其他语言(德语,法语等)给出名称,则存在问题.
在servlet方法中,请求的字符编码设置为UTF-8.我甚至尝试过如上所述的过滤器 - 如何让这段代码提交一个带有jQuery/Ajax工作的UTF-8表单textarea? - 但它似乎不起作用.只有文件名似乎是乱码.
文件名所在的MySQL表支持UTF-8.我给了随机的非英文字符,它们被正确存储/显示.
使用Fiddler,我监视请求并正确传递所有POST数据.我正在尝试确定数据如何/在哪里出现乱码.任何帮助将不胜感激.
Phi*_*ger 57
我使用Apache commons-fileupload遇到了同样的问题.我没有找到导致问题的原因,特别是因为我在以下地方有UTF-8编码:1.HTML元标记2.表单accept-charset属性3. Tomcat过滤每个设置"UTF-8"的请求编码
- >我的解决方案是将字符串从ISO-8859-1(或者你的平台的默认编码)转换为UTF-8:
new String (s.getBytes ("iso-8859-1"), "UTF-8");
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
编辑:从Java 8开始,您还可以使用以下内容:
new String (s.getBytes (StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)
nau*_*svn 27
只需使用Apache commons上传库.添加URIEncoding="UTF-8"到Tomcat的连接器,并使用FileItem.getString("UTF-8")而不是FileItem.getString()而不指定charset.
希望这有帮助.
Rog*_*ays 19
我遇到了这个问题,发现这是调用的顺序
request.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
这导致了问题.它必须在对request.getParameter()的所有调用之前调用,所以我在我的过滤器链的顶部使用了一个特殊的过滤器.
http://www.ninthavenue.com.au/servletrequest-setcharactercoding-ignored
Dan*_*Dan 13
我遇到了同样的问题,结果发现除了在Filter中指定编码之外
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
有必要在表单中添加"acceptcharset"
<form method="post" enctype="multipart/form-data" acceptcharset="UTF-8" >
Run Code Online (Sandbox Code Playgroud)
并且运行在JVM与
-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
如果使用response.setCharacterEncoding()在HTTP标头中发送它,则不需要HTML元标记.
小智 7
如果有人在使用Grails(或纯Spring)Web应用程序时偶然发现了这个问题,这里的帖子对我有帮助:
http://forum.spring.io/forum/spring-projects/web/2491-solved-character-encoding-and-multipart-forms
要为多部分请求将默认编码设置为UTF-8(而不是ISO-8859-1),我在resources.groovy(Spring DSL)中添加了以下代码:
multipartResolver(ContentLengthAwareCommonsMultipartResolver) {
defaultEncoding = 'UTF-8'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128922 次 |
| 最近记录: |