base64编码和url编码

本文介绍了一个使用Java实现的消息发送类示例,主要展示了如何利用Base64进行字符串编码与解码,并结合URL编码来处理中文字符。通过具体代码演示了字符串的编码过程及其逆过程。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


/**
*
* @author yy
* 消息发送类
*/
public class MessageSender {

public static void main(String[] args) throws IOException {
BASE64Encoder base=new BASE64Encoder();
String contents = "一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十";
String s = URLEncoder.encode(base.encode(contents.getBytes()),"UTF-8");
System.out.println(contents);
System.out.println(s);

BASE64Decoder decoder=new BASE64Decoder();
byte[] de = decoder.decodeBuffer(URLDecoder.decode(s,"UTF-8"));
String s2 = new String(de);
System.out.println(s2);
}
}
### Base64 编码URL 编码的区别 #### 1. 编码目的与应用场景 Base64 编码的主要作用是将二进制数据转换为 ASCII 字符串格式,以便在仅支持文本传输或存储的系统中安全地传输或存储二进制数据。例如,在 Java 中,Base64 编码常用于将图片、文件等内容嵌入到 JSON、XML 或 HTML 中进行传输 [^3]。 URL 编码(也称为百分号编码)则是用于在 URL 中安全传输特殊字符。由于 URL 中某些字符(如空格、`+`、`/`、`?` 等)具有特殊含义,因此需要对这些字符进行编码,以确保数据在传输过程中不会被错误解析。URL 编码通常用于对查询参数进行编码,使其可以在 URL 中安全传输 [^4]。 #### 2. 编码方式与字符集 Base64 使用 64 个 ASCII 字符作为编码字符集,包括大小写字母、数字部分符号(如 `+` `/`),并使用 `=` 作为填充字符。其编码结果通常比原始数据体积增加约 33% [^2]。 URL 编码则使用 ASCII 字符集中的安全字符,对于不安全字符(如空格、中文字符等),将其转换为 `%` 后跟两个十六进制字符的形式。例如,空格会被编码为 `%20`,而 `+` 会被编码为 `%2B`。 #### 3. 安全性与数据膨胀 Base64 编码虽然可以将数据转换为文本格式,但其并不是加密手段,不具备任何安全性。任何拥有 Base64 编码数据的人都可以轻松将其解码回原始数据 [^2]。 URL 编码同样不具备安全性,仅用于确保数据在 URL 中正确传输。此外,Base64 编码会导致数据体积增加约 33%,而 URL 编码则根据具体字符的编码情况决定数据大小,通常增加幅度较小 [^2]。 #### 4. Java 中的实现方式 在 Java 中,`java.util.Base64` 提供了 Base64 编码解码的功能。例如: ```java import java.util.Base64; public class Base64Example { public static void main(String[] args) { String original = "Hello World"; String encoded = Base64.getEncoder().encodeToString(original.getBytes()); System.out.println("Encoded: " + encoded); byte[] decoded = Base64.getDecoder().decode(encoded); System.out.println("Decoded: " + new String(decoded)); } } ``` URL 编码在 Java 中可以通过 `java.net.URLEncoder` `java.net.URLDecoder` 实现。例如: ```java import java.net.URLEncoder; import java.net.URLDecoder; public class URLEncodingExample { public static void main(String[] args) throws Exception { String original = "Hello World"; String encoded = URLEncoder.encode(original, "UTF-8"); System.out.println("Encoded: " + encoded); String decoded = URLDecoder.decode(encoded, "UTF-8"); System.out.println("Decoded: " + decoded); } } ``` #### 5. 适用场景对比 - **Base64 编码**适用于需要将二进制数据以文本形式传输或存储的场景,如图片嵌入、数据 URI 传输、跨平台数据一致性保障等 [^1]。 - **URL 编码**适用于在 URL 中安全传输参数,特别是在 Web 请求中对查询字符串进行编码,以防止特殊字符破坏 URL 结构 [^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值