Java下载文件时文件名乱码问题解决办法

时间:2023-08-23 17:37:03 


public static String toUtf8String(String s) {

             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < s.length(); i++) {
                 char c = s.charAt(i);
                 if (c >= 0 && c <= 255) {
                     sb.append(c);
                 } else {
                     byte[] b;
                     try {
                         b = Character.toString(c).getBytes("utf-8");
                     } catch (Exception ex) {
                         exceptionUtil.error("将文件名中的汉字转为UTF8编码的串时错误,输入的字符串为:" + s);
                         b = new byte[0];
                     }
                     for (int j = 0; j < b.length; j++) {
                         int k = b[j];
                         if (k < 0)
                             k += 256;
                         sb.append("%" + Integer.toHexString(k).toUpperCase());
                     }
                 }
             }
             return sb.toString();
         }

         /**
          * 根据不同浏览器将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
          * 
          * @param s
          *            原文件名
          * @return 重新编码后的文件名
          */
         public static String toUtf8String(HttpServletRequest request, String s) {
             String agent = request.getHeader("User-Agent");
             try {
                 boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1);
                 if (isFireFox) {
                     s = new String(s.getBytes("UTF-8"), "ISO8859-1");
                 } else {
                     s = StringUtil.toUtf8String(s);
                     if ((agent != null && agent.indexOf("MSIE") != -1)) {
                         // see http://support.microsoft.com/default.aspx?kbid=816868
                         if (s.length() > 150) {
                             // 根据request的locale 得出可能的编码
                             s = new String(s.getBytes("UTF-8"), "ISO8859-1");
                         }
                     }
                 }
             } catch (UnsupportedEncodingException e) {
                 e.printStackTrace();
             }
             return s;
         }
标签:下载,文件,乱码
0
投稿

猜你喜欢

  • Android开发基础简化Toast调用方法详解

    2022-02-11 00:44:09
  • c#消息提示框messagebox的详解及使用

    2022-06-25 14:57:44
  • Java环境配置图文教程(推荐)

    2023-09-17 11:27:42
  • 功能强大的Android滚动控件RecyclerView

    2022-11-30 13:45:27
  • Jetpack Compose实现列表和动画效果详解

    2022-07-16 21:14:44
  • SpringBoot在项目中访问静态资源步骤分析

    2022-12-13 08:04:31
  • Android中使用ZXing生成二维码(支持添加Logo图案)

    2023-12-24 21:34:58
  • Java垃圾回收器的方法和原理总结

    2022-06-27 07:11:46
  • Mybatis动态调用表名和字段名的解决方法

    2022-03-18 16:54:14
  • springboot整合shiro多验证登录功能的实现(账号密码登录和使用手机验证码登录)

    2023-05-25 18:53:29
  • Android游戏开发:实现手势操作切换图片的实例

    2022-05-06 11:55:01
  • Android App调试内存泄露之Cursor篇

    2023-11-22 03:36:29
  • Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析

    2023-01-07 04:22:29
  • 详细聊聊如何在C#循环中捕获局部变量

    2021-10-30 17:05:13
  • springboot整合mybatisplus的方法详解

    2023-05-20 18:35:05
  • Spring Boot将项目打包成war包的操作方法

    2022-01-02 22:30:50
  • Java实现图片倒影的源码实例内容

    2022-08-30 02:39:24
  • Android studio 出现 Unsupported major.minor version 52.0解决办法

    2023-12-01 18:30:53
  • Java日常练习题,每天进步一点点(41)

    2023-05-18 18:10:02
  • kotlin gson反序列化默认值失效深入讲解

    2022-04-07 15:28:59
  • asp之家 软件编程 m.aspxhome.com