解决BASE64Encoder报错的问题

解决BASE64Encoder报错的问题今天在用servlet写一个文件下载的案例时,想解决文件的中文显示问题。然后在导包importsun.misc.BASE64Encoder时,发现IDEA报错了,无法识别这个类。最后发现在JDK9后,官方就已经不支持importsun.misc.BASE64Encoder了。网上说了很多,第一种是把JDK的版本降低到1.8以内。但是我觉得这不是解决的最好办法。我觉得应该去修改原有的代码。所以我采用了官方提供了新的jar包importjava.util.Base64。下面这个java类的本意

大家好,又见面了,我是你们的朋友全栈君。

今天在用servlet写一个文件下载的案例时,想解决文件的中文显示问题。然后在导包import sun.misc.BASE64Encoder时,发现IDEA报错了,无法识别这个类。最后发现在JDK9后,官方就已经不支持import sun.misc.BASE64Encoder了。

网上说了很多,第一种是把JDK的版本降低到1.8以内。但是我觉得这不是解决的最好办法。我觉得应该去修改原有的代码。

所以我采用了官方提供了新的jar包import java.util.Base64。

下面这个java类的本意是为了,给文件名在不同的浏览器中,修改对应的编码格式,使其能正确显示中文。

这是用sun.misc.BASE64Encoder;


import sun.misc.BASE64Encoder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


public class DownLoadUtils {

    public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
        if (agent.contains("MSIE")) {
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else if (agent.contains("Firefox")) {
            // 火狐浏览器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

把BASE64Encoder base64Encoder = new BASE64Encoder();修改为Base64.Encoder encoder = Base64.getEncoder();

并把encode()方法改为encodeToString()。其他都无需修改。

import java.util.Base64;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


public class DownLoadUtils {

    public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
        if (agent.contains("MSIE")) {
            // IE浏览器(版本太低的也无法打开)
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else if (agent.contains("Firefox")) {
            // 火狐浏览器
            Base64.Encoder encoder = Base64.getEncoder();
            filename = "=?utf-8?B?" + encoder.encodeToString(filename.getBytes("utf-8")) + "?=";
        } else {
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

这样IDEA就不会报错了。

使用火狐浏览器打开后,中文名就可以显示了

解决BASE64Encoder报错的问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147729.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月15日 上午6:16
下一篇 2022年6月15日 上午6:16


相关推荐

  • nohup 执行mysql命令_nohup命令

    nohup 执行mysql命令_nohup命令nohup amp 方式 Unix Linux 下一般想让某个程序在后台运行 很多都是使用 amp 在程序结尾来让程序自动运行 比如我们要运行 mysql 在后台 usr local mysql bin mysqld safeuser mysql amp nohup 方式 但是我们很多程序并不象 mysqld 一样可以做成守护进程 可能我们的程序只是普通程序而已 一般这种程序即使使用 amp

    2026年3月19日
    3
  • Openclaw 来了,Clawdbot 再次改名(之前是 moltbot)

    Openclaw 来了,Clawdbot 再次改名(之前是 moltbot)

    2026年3月13日
    1
  • 网络虚拟化协议GENEVE

    网络虚拟化协议GENEVE去年看到过一篇文章 1 说是通过 OpenVSwitch 的测试 GENEVE 的性能要略优于 VXLAN 我相信大多数人的反应可能跟我的第一反应一样 这不又是一种 Overlay 协议吗 为什么性能会更好 难道有什么黑科技 我们这次来分析一下 GENEVE 有什么不一样 网络虚拟化要说清楚来龙去脉 需要从网络虚拟化开始说起 网络虚拟化 NetworkingVi 是在一个 underlay 网络上划分出多个 overlay 网路 原本只支持一套网络的设备 通过网络虚拟化 现在可以用来支持多套网络 网络虚

    2026年3月20日
    2
  • Blob数据类型的使用

    Blob数据类型的使用Blob 数据类型的使用 nbsp nbsp nbsp blob 200 nbsp nbsp bl var nbsp nbsp nbsp nbsp nbsp nbsp 定义一个初始大小为 200 字节 blob nbsp nbsp nbsp blob nbsp nbsp bl var nbsp nbsp nbsp nbsp nbsp nbsp 普通定义方法 零长度 blob nbsp nbsp nbsp bl var nbsp nbsp nbsp nbsp Blob Space 200 nbsp nbsp nbsp nbsp nbsp nbsp 动态分配 200 个字节 实际上是分配了一个 200 字符的字符串 全部为空格 ASCII 码 20H 最后转换

    2026年3月17日
    2
  • input file 修改按钮名称[通俗易懂]

    input file 修改按钮名称[通俗易懂]解决方法:1、页面上放个隐藏的2、然后加上一个文本input(type=”text”)和一个按钮input(type=”button”)3、点按钮的时候调用的click选择文件4、在的onchange事件中把其值显示在文本input中5、注意把文本input设置成只读的,防止出错实例如下:

    2022年7月14日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号