上传的日文和中文文件名编码问题

2024-03-21

我目前正在使用jQuery 文件上传 https://github.com/blueimp/jQuery-File-Upload。我可能会上传一些带有日文或中文文件名的文件,在浏览器的调试模式下我可以看到文件名例如是“お疲れ様です.txt”或“测试文档.txt”,但在后端(Java) ,它们就变成了“ãŠç–²ã‚Œæ§~ã�§ã�™.txt”和“浪•æ–‡æ¡£.txt”。
我曾经尝试设置表单接受字符集 to UTF-8但它不起作用。
问题:
解析MultipartFormData时如何在Java端获取正确的文件名?

提前致谢。

顺便说一句,以下是我的数据

-----------------------------25382434931419
Content-Disposition: form-data; name="file"; filename="�疲れ様��.txt"
Content-Type: text/plain
....

添加Java代码
事实上我目前在Java方面什么也没做,

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String upload(InMultiPart inMP) {
    while (inMP.hasNext()) {
        InPart part = inMP.next();
        MultivaluedMap<String, String> headers = part.getHeaders();
        String fileName = null;
        if (!headers.containsKey("Content-Disposition")) {
            continue;
        } else {
            // get the file name here
            fileName = parseFileName(headers.getFirst("Content-Disposition"));
        }
        //.....
    }
    //......
}

private String parseFileName(String disposition) {
    int fileNameIndex = disposition.indexOf("filename=");
    if (fileNameIndex < 0) {
        return null;
    }
    int start = disposition.indexOf("\"", fileNameIndex) + 1;
    int end = disposition.indexOf("\"", start);
    return  disposition.substring(start, end);
}

正如 Stephen C 所说,可以使用过滤器来获得正确的编码。我们在 JBOSS 7.1.1 上遇到了这个问题,并实现了一个过滤器。

在网络 XML 中

<filter>
    <display-name>set character encoding</display-name>
    <filter-name>RequestEncodingFilter</filter-name>
    <filter-class>com.myapp.RequestEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>RequestEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器类别:

public class RequestEncodingFilter implements Filter {

private static final String ENCODING = "encoding";
private String configuredEncoding;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    configuredEncoding = filterConfig.getInitParameter(ENCODING);
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    servletRequest.setCharacterEncoding(configuredEncoding);
    filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传的日文和中文文件名编码问题 的相关文章

随机推荐

  • ActionController::Live 是否可以检查连接是否仍然有效?

    我正在尝试使用 Rails 4 的实时流媒体来实现文本 事件流 它工作得很好 我遇到的唯一麻烦是我无法在不发送任何消息的情况下检查连接是否有效 我想到的唯一解决方案是使用循环刻度生成器创建支持通道 以便某些后台任务会定期向那里发送消息 但看
  • 调用构造函数重新初始化对象

    是否可以使用类的构造函数重新初始化类的对象 有点 给定 A 类 A a a A 最后一条语句不是初始化 而是赋值 但它可能会执行您想要的操作
  • 如何在jboss中生成resteasy的wadl文件

    我想为我的项目生成一个 wadl 文件 该文件使用resteasy Jboss 6 4 Maven 有很多关于球衣的例子 但不是关于resteasy的 有人用它来resteasy吗 Resteasy 从 3 0 14 Final 开始支持
  • 对 Cassandra 术语感到困惑(行与分区)

    我希望有人能够消除我对 Cassandra 中的行和分区之间的区别的困惑 我认为一行将是一组列 就像在 SQL 数据库中 如架构中指定的那样 按分区键跨节点分布 并按每个分区内的集群键排序 但后来我遇到了这个教程 https academy
  • 我应该如何处理非常非常长的 URL?

    我想知道这是否是一个错误 但现在我对所有搜索 URL 都使用 GET 原因是 通过 GET Url 用户可以简单地复制地址栏上的链接并轻松共享或保存 例如 Google 似乎也使用 GET Url 表单 由于它是一个带有过滤器 排序器等的搜
  • 在nodebox opengl中向图形的边缘添加标签

    我正在尝试向图表中的每个边添加标签 如下所示 基本上上面的每个边缘都有标签在中心 当我向每个图表添加边时 我尝试添加标签 就像这样 对于图表g g add edge label edge distance 经过一番研究 我发现这样的标签是可
  • 将值分配给特定的 data.table 列和行

    仍然理解这个伟大的包 有人可以解释一下这个错误的原因吗 谢谢 library data table DT lt data table id LETTERS var1 rnorm 26 var2 rnorm 26 gt DT 2 list v
  • 如何在heroku上的两个不同应用程序之间共享worker?

    我有两个独立的应用程序在heroku上运行并指向同一个数据库 第一个负责user interface第二个为admin interface 我在用sidekiq with redis对于后台作业处理 我添加了一个工作人员 并且可以通过设置指
  • 对大文件使用 Rijndael 加密

    我面临的情况是 我需要安全地加密 解密 n 长度的文件 最好使用 Rijndael 但绝对是 256 位加密 我以前玩过加密 并且非常高兴地加密 解密了字符串和字节数组 但是 因为我不知道文件的大小 并且有问题的文件可能非常大 2 5gb
  • 从 VB.NET 应用程序将文件发送到 PHP 脚本

    我需要将一些数据从内部网络上的 SQL DB 服务器发送到外部 Web 服务器 我希望通过编写一个每天调用一次的 VB NET 应用程序来实现此目的 该应用程序将大约 1 MB 的数据发送到 Web 服务器上的 PHP 脚本 然后将其存储在
  • node.js -- 同步执行命令并获取结果

    我试图在 node js 中同步执行 child process 是的 我知道这很糟糕 我有充分的理由 并检索 stdout 上的任何输出 但我不太清楚如何 我发现这个帖子 Node js同步执行系统命令 https stackoverfl
  • 如何在 VBA Sub 中应用 SumIf 公式?出现错误 1004

    我正在尝试创建一个 Sub 来放置SUMIF单元格中的公式 我已将问题简化为简单的设置 Private Sub CommandButton1 Click Cells 2 3 Formula SUMIF A1 A5 D1 B1 B5 End
  • Azure 云存储帐户的连接字符串

    如何创建到云存储帐户的连接字符串以便可以访问表 blob 和队列 示例代码表示赞赏 如果您在 Azure 门户中查看相关存储帐户下的内容 并查看左侧导航栏中的 访问密钥 项 则会显示提供的两个密钥以及访问存储帐户所需的整个连接字符串
  • 链接 C++ 流

    我正在考虑将几个 C iostream 链接 在一起以过滤输入两次 我正在使用 gzstreams 读取 zlib 压缩文件 并且正在考虑编码一个从流中读取并执行编码转换的流 也许通过传递一个打开的流作为构造函数参数 您认为这可以最好地实现
  • 水晶报表-关闭数据库连接

    这是C Visual Studio 2008 VS2008附带的水晶报表 我有一个驻留在 DLL 中的水晶报表查看器表单 DLL 负责加载水晶报表 基于报表文件名 并将报表显示在窗体上 当我完成水晶报表后 我对加载的报表文档对象调用 dis
  • Yeomen webapp 生成器在 Windows 上的 grunt 构建上失败

    我正在尝试 yeomen 脚手架工具 唯一的问题是我遇到了一些问题和咕噜声 我正在尝试使用 webapp 生成器组装一个简单的网站 搭建应用程序并使用grunt serve工作完美 仅在使用时失败grunt build 它失败并显示以下消息
  • 在for循环中取消NSOperation?

    我正在尝试使用在后台线程上实现搜索NSOperation on iOS 我不想子类化NSOperation所以这就是我正在做的 searchQueue cancelAllOperations NSInvocationOperation op
  • 成本函数和梯度似乎有效,但 scipy.optimize 函数无效

    我正在为 Andrew NG Coursera 课程编写 Matlab 代码 并将其转换为 python 我正在研究非正则化逻辑回归 在编写梯度和成本函数后 我需要类似于 fminunc 的东西 经过一番谷歌搜索后 我找到了几个选项 它们都
  • 防止 BoxLayout 扩展子项

    我想在 JPanel 内垂直堆叠一些 JComponent 以便它们堆叠在顶部 任何额外的空间都在底部 我正在使用 BoxLayout 每个组件都包含一个 JTextArea 必要时应允许文本换行 因此 基本上 我希望每个组件的高度是显示
  • 上传的日文和中文文件名编码问题

    我目前正在使用jQuery 文件上传 https github com blueimp jQuery File Upload 我可能会上传一些带有日文或中文文件名的文件 在浏览器的调试模式下我可以看到文件名例如是 疲 様 txt 或 测试文