`
yzz9i
  • 浏览: 221082 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

encodeURIComponent 与 decodeURIComponent 编码互转

 
阅读更多
package com.file;


import java.io.UnsupportedEncodingException;
 
public class UrlDeal {
	public static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()";
 
	public static String encodeURIComponent(String input) {
		if (input == null || "".equals(input)) {
			return input;
		}
 
		int l = input.length();
		StringBuilder o = new StringBuilder(l * 3);
		try {
			for (int i = 0; i < l; i++) {
				String e = input.substring(i, i + 1);
				if (ALLOWED_CHARS.indexOf(e) == -1) {
					byte[] b = e.getBytes("utf-8");
					o.append(getHex(b));
					continue;
				}
				o.append(e);
			}
			return o.toString();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return input;
	}
 
	private static String getHex(byte buf[]) {
		StringBuilder o = new StringBuilder(buf.length * 3);
		for (int i = 0; i < buf.length; i++) {
			int n = (int) buf[i] & 0xff;
			o.append("%");
			if (n < 0x10) {
				o.append("0");
			}
			o.append(Long.toString(n, 16).toUpperCase());
		}
		return o.toString();
	}
 
	public static String decodeURIComponent(String encodedURI) {
		char actualChar;
 
		StringBuffer buffer = new StringBuffer();
 
		int bytePattern, sumb = 0;
 
		for (int i = 0, more = -1; i < encodedURI.length(); i++) {
			actualChar = encodedURI.charAt(i);
 
			switch (actualChar) {
			case '%': {
				actualChar = encodedURI.charAt(++i);
				int hb = (Character.isDigit(actualChar) ? actualChar - '0'
						: 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
				actualChar = encodedURI.charAt(++i);
				int lb = (Character.isDigit(actualChar) ? actualChar - '0'
						: 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
				bytePattern = (hb << 4) | lb;
				break;
			}
			case '+': {
				bytePattern = ' ';
				break;
			}
			default: {
				bytePattern = actualChar;
			}
			}
 
			if ((bytePattern & 0xc0) == 0x80) { // 10xxxxxx
				sumb = (sumb << 6) | (bytePattern & 0x3f);
				if (--more == 0)
					buffer.append((char) sumb);
			} else if ((bytePattern & 0x80) == 0x00) { // 0xxxxxxx
				buffer.append((char) bytePattern);
			} else if ((bytePattern & 0xe0) == 0xc0) { // 110xxxxx
				sumb = bytePattern & 0x1f;
				more = 1;
			} else if ((bytePattern & 0xf0) == 0xe0) { // 1110xxxx
				sumb = bytePattern & 0x0f;
				more = 2;
			} else if ((bytePattern & 0xf8) == 0xf0) { // 11110xxx
				sumb = bytePattern & 0x07;
				more = 3;
			} else if ((bytePattern & 0xfc) == 0xf8) { // 111110xx
				sumb = bytePattern & 0x03;
				more = 4;
			} else { // 1111110x
				sumb = bytePattern & 0x01;
				more = 5;
			}
		}
		return buffer.toString();
	}
	public static void main(String[] arges){
		System.out.println(decodeURIComponent("%E4%BD%A0%E5%A5%BD%20%E7%9C%9F%E7%9A%84"));
		System.out.println(encodeURIComponent("真的"));
		System.out.println("%E4%BD%A0%E5%A5%BD%20%E7%9C%9F%E7%9A%84");
	}
}
0
0
分享到:
评论

相关推荐

    深入解析:JavaScript中的`encodeURIComponent`与`decodeURIComponent`方法

    encodeURIComponent和decodeURIComponent是JavaScript中处理URL编码和解码的重要工具。它们在Web开发中的应用广泛,对于确保数据的正确传输和处理至关重要。通过本文的详细介绍和示例代码,你应该能够理解这两个函数...

    encodeURIComponent encodeURI 中文转GBK编码

    serialize , encodeURIComponent encodeURI 中文转成GBK编码 encodeURIComponent encodeURI 默认转 utf-8 ;重写方法 转成GBK

    JS实现URL编码转换中文

    在JavaScript中,提供了`encodeURIComponent`和`decodeURIComponent`两个方法来进行URL编码与解码操作。 - **`encodeURIComponent`**:该函数接受一个字符串作为参数,并返回一个经过URL编码的字符串。 - **`...

    URL编码转换,escape() encodeURI() encodeURIComponent()

    unescape方法与此相反。不会被此方法编码的字符: @ * / +英文解释:MSDN JScript Reference: The escape method returns a string value (in Unicode format) that contains the contents of...

    关于JAVASCRIPT urldecode URL解码的问题

    这个时候,出现了encodeURIComponent、decodeURIComponent,它可以完全的对URL进行编码解码,但是遇到例如搜索引擎用到的部分转码,又摸不到门了,没问题,PHP官方出了一个解决方案: 代码如下: decodeURIComponent...

    js的encodeUri编码转换为GBK问题

    通常,这个过程涉及到两个步骤:首先,使用`decodeURIComponent`函数解码已编码的URI;其次,使用`TextEncoder`或第三方库(如iconv-lite)将GBK编码转换为UTF-8。 在博文《js的encodeUri编码转换为GBK问题》中,...

    易语言JS实现编码转换源码

    JavaScript的内建函数如`decodeURI()`, `decodeURIComponent()`, `encodeURIComponent()` 和 `encodeURI()` 提供了基本的编码和解码功能,但它们主要针对URL编码。对于更复杂的编码转换,如GBK到UTF-8,或者反之,...

    JS中encodeURIComponent函数用php解码的代码

    在JS中使用了encodeURIComponent对中文进行编码在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中gb2312根据你实际应用来定如还不明白为什么看下面的

    url编码表,转换编码

    例如,JavaScript的`encodeURIComponent()`和`decodeURIComponent()`函数,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`方法,以及Java的`java.net.URLEncoder.encode()`和`java.net.URLDecoder....

    JavaScript、JavaWeb对汉字等的编码与解码处理

    JavaScript、JavaWeb对汉字等的编码与解码处理 JavaScript和JavaWeb对汉字编码的策略是非常重要的,特别是在Web开发中,编码和解码的正确处理对于确保数据的正确传输和显示至关重要。在本资源中,我们将详细介绍...

    js中文乱码问题分析及解决方案.docx

    在JavaScript中,我们可以使用三个编码函数来处理URL编码问题:escape/unescape、encodeURI/decodeURI和encodeURIComponent/decodeURIComponent。 1. escape/unescape函数 escape函数可以对传入的字符串进行转义...

    js对中文字符串进行gb2312编码解码

    在JavaScript(JS)中,处理中文字符编码是一个常见的需求,特别是在与服务器交互或者处理文本数据时。GB2312编码是一种在中国大陆广泛使用的简体中文字符集,它包含了6763个常用汉字和一些其他字符。在JavaScript中...

    url编码转换器

    例如,JavaScript中的`encodeURIComponent()`和`decodeURIComponent()`函数,可以方便地对URL进行编码和解码。 使用“url编码转换器”这样的工具,用户可以便捷地处理URL中的编码问题,无论是手动输入的链接还是...

    UrlEncode编码转换.zip

    例如,在JavaScript中,`encodeURIComponent()`和`decodeURIComponent()`函数分别用于编码和解码;在Python中,可以使用`urllib.parse.quote()`和`urllib.parse.unquote()`。在处理这些函数时,要注意编码和解码的上...

    JavaScript、C# URL编码、解码总结

    本文将详细介绍JavaScript和C#中的URL编码与解码方法,并对比它们的区别和应用场景。 JavaScript提供了两个主要的URL编码函数:`encodeURI()` 和 `encodeURIComponent()`,以及对应的解码函数 `decodeURI()` 和 `...

    URL编码 URL编码

    在实际编程中,大多数编程语言都提供了内置函数来自动进行URL编码和解码,如JavaScript的`encodeURIComponent()`和`decodeURIComponent()`,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`等。...

    在asp中使用js的encodeURIComponent方法

    具体来讲,encodeURIComponent函数会将字符串作为URI的一部分进行转义,这意味着它会对所有的字符进行编码,包括那些通常不会被URL编码的字符,比如标点符号和特殊字符。这样做的好处是能够确保URI的每一部分都不会...

    javascript 对url编码 解码

    JavaScript 中对 URL 编码和解码涉及到六个函数:escape、encodeURI、encodeURIComponent、unescape、decodeURI 和 decodeURIComponent。这六个函数的使用场景和特点分别是: escape 函数:escape 函数用于将字符串...

    Javascript下的urlencode编码解码方法附decodeURIComponent

    总的来说,JavaScript的`encodeURIComponent`和`decodeURIComponent`是处理URL编码和解码的标准方法,适用于大多数情况。但在处理跨语言环境或特定编码格式的数据时,可能需要额外的适配和测试,以确保数据的正确...

    java 中类似js encodeURIComponent 函数的实现案例

    总结来说,Java中实现`encodeURIComponent`和`decodeURIComponent`的方法需要额外的转换步骤,以确保与JavaScript的对应函数行为一致。这些自定义的实现可以帮助你在Java代码中处理URI编码和解码,尤其是在需要与...

Global site tag (gtag.js) - Google Analytics