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");
}
}
分享到:
相关推荐
encodeURIComponent和decodeURIComponent是JavaScript中处理URL编码和解码的重要工具。它们在Web开发中的应用广泛,对于确保数据的正确传输和处理至关重要。通过本文的详细介绍和示例代码,你应该能够理解这两个函数...
serialize , encodeURIComponent encodeURI 中文转成GBK编码 encodeURIComponent encodeURI 默认转 utf-8 ;重写方法 转成GBK
在JavaScript中,提供了`encodeURIComponent`和`decodeURIComponent`两个方法来进行URL编码与解码操作。 - **`encodeURIComponent`**:该函数接受一个字符串作为参数,并返回一个经过URL编码的字符串。 - **`...
unescape方法与此相反。不会被此方法编码的字符: @ * / +英文解释:MSDN JScript Reference: The escape method returns a string value (in Unicode format) that contains the contents of...
这个时候,出现了encodeURIComponent、decodeURIComponent,它可以完全的对URL进行编码解码,但是遇到例如搜索引擎用到的部分转码,又摸不到门了,没问题,PHP官方出了一个解决方案: 代码如下: decodeURIComponent...
通常,这个过程涉及到两个步骤:首先,使用`decodeURIComponent`函数解码已编码的URI;其次,使用`TextEncoder`或第三方库(如iconv-lite)将GBK编码转换为UTF-8。 在博文《js的encodeUri编码转换为GBK问题》中,...
JavaScript的内建函数如`decodeURI()`, `decodeURIComponent()`, `encodeURIComponent()` 和 `encodeURI()` 提供了基本的编码和解码功能,但它们主要针对URL编码。对于更复杂的编码转换,如GBK到UTF-8,或者反之,...
在JS中使用了encodeURIComponent对中文进行编码在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中gb2312根据你实际应用来定如还不明白为什么看下面的
例如,JavaScript的`encodeURIComponent()`和`decodeURIComponent()`函数,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`方法,以及Java的`java.net.URLEncoder.encode()`和`java.net.URLDecoder....
JavaScript、JavaWeb对汉字等的编码与解码处理 JavaScript和JavaWeb对汉字编码的策略是非常重要的,特别是在Web开发中,编码和解码的正确处理对于确保数据的正确传输和显示至关重要。在本资源中,我们将详细介绍...
在JavaScript中,我们可以使用三个编码函数来处理URL编码问题:escape/unescape、encodeURI/decodeURI和encodeURIComponent/decodeURIComponent。 1. escape/unescape函数 escape函数可以对传入的字符串进行转义...
在JavaScript(JS)中,处理中文字符编码是一个常见的需求,特别是在与服务器交互或者处理文本数据时。GB2312编码是一种在中国大陆广泛使用的简体中文字符集,它包含了6763个常用汉字和一些其他字符。在JavaScript中...
例如,JavaScript中的`encodeURIComponent()`和`decodeURIComponent()`函数,可以方便地对URL进行编码和解码。 使用“url编码转换器”这样的工具,用户可以便捷地处理URL中的编码问题,无论是手动输入的链接还是...
例如,在JavaScript中,`encodeURIComponent()`和`decodeURIComponent()`函数分别用于编码和解码;在Python中,可以使用`urllib.parse.quote()`和`urllib.parse.unquote()`。在处理这些函数时,要注意编码和解码的上...
本文将详细介绍JavaScript和C#中的URL编码与解码方法,并对比它们的区别和应用场景。 JavaScript提供了两个主要的URL编码函数:`encodeURI()` 和 `encodeURIComponent()`,以及对应的解码函数 `decodeURI()` 和 `...
在实际编程中,大多数编程语言都提供了内置函数来自动进行URL编码和解码,如JavaScript的`encodeURIComponent()`和`decodeURIComponent()`,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`等。...
具体来讲,encodeURIComponent函数会将字符串作为URI的一部分进行转义,这意味着它会对所有的字符进行编码,包括那些通常不会被URL编码的字符,比如标点符号和特殊字符。这样做的好处是能够确保URI的每一部分都不会...
JavaScript 中对 URL 编码和解码涉及到六个函数:escape、encodeURI、encodeURIComponent、unescape、decodeURI 和 decodeURIComponent。这六个函数的使用场景和特点分别是: escape 函数:escape 函数用于将字符串...
总的来说,JavaScript的`encodeURIComponent`和`decodeURIComponent`是处理URL编码和解码的标准方法,适用于大多数情况。但在处理跨语言环境或特定编码格式的数据时,可能需要额外的适配和测试,以确保数据的正确...
总结来说,Java中实现`encodeURIComponent`和`decodeURIComponent`的方法需要额外的转换步骤,以确保与JavaScript的对应函数行为一致。这些自定义的实现可以帮助你在Java代码中处理URI编码和解码,尤其是在需要与...