java.net.URLEncoder类对空格的处理
来源:互联网 发布:linux apt命令详解 编辑:程序博客网 时间:2024/04/29 11:45
String s = java.net.URLEncoder.encode(" ", "utf-8");
无论后面的编码是什么,转码之后s始终等于+
查看jdk源码java.net.URLEncoder,原来对空格的处理就是:
if (c == ' ') {
c = '+';
needToChange = true;
}
已经写的很死,没办法发改,如果要将空格换成其他的要通过String的方法
如:
String url = http://localhost:8080/one/on e.jsp//若要被浏览器认识
则必须:
url = url.replaceAll(" ", "%20");
得到url = http://localhost:8080/one/on%20e.jsp
下面是java jdk1.6中java.net.URLEncoder类的源码,用红线标出来到是空格所走的路线
package java.net;
import java.io.ByteArrayOutputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.CharArrayWriter;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.UnsupportedCharsetException ;
import java.util.BitSet;
import java.security.AccessController;
import java.security.PrivilegedAction;
import sun.security.action.GetBooleanAction;
import sun.security.action.GetPropertyAction;
public class URLEncoder {
static BitSet dontNeedEncoding;
static final int caseDiff = ('a' - 'A');
static String dfltEncName = null;
static {
dontNeedEncoding = new BitSet(256);
int i;
for (i = 'a'; i <= 'z'; i++) {
dontNeedEncoding.set(i);
}
for (i = 'A'; i <= 'Z'; i++) {
dontNeedEncoding.set(i);
}
for (i = '0'; i <= '9'; i++) {
dontNeedEncoding.set(i);
}
dontNeedEncoding.set(' '); /* encoding a space to a + is done
* in the encode() method */
dontNeedEncoding.set('-');
dontNeedEncoding.set('_');
dontNeedEncoding.set('.');
dontNeedEncoding.set('*');
dfltEncName = (String)AccessController.doPrivileged (
new GetPropertyAction("file.encoding")
);
}
private URLEncoder() { }
@Deprecated
public static String encode(String s) {
String str = null;
try {
str = encode(s, dfltEncName);
} catch (UnsupportedEncodingException e) {
}
return str;
}
public static String encode(String s, String enc) throws UnsupportedEncodingException {
boolean needToChange = false;
StringBuffer out = new StringBuffer(s.length());
Charset charset;
CharArrayWriter charArrayWriter = new CharArrayWriter();
if (enc == null)
throw new NullPointerException("charsetName");
try {
charset = Charset.forName(enc);
} catch (IllegalCharsetNameException e) {
throw new UnsupportedEncodingException(enc);
} catch (UnsupportedCharsetException e) {
throw new UnsupportedEncodingException(enc);
}
for (int i = 0; i < s.length();) {
int c = (int) s.charAt(i);
if (dontNeedEncoding.get(c)) {
if (c == ' ') {
c = '+';
needToChange = true;
}
out.append((char)c);
i++;
} else {
do {
charArrayWriter.write(c);
if (c >= 0xD800 && c <= 0xDBFF) {
if ( (i+1) < s.length()) {
int d = (int) s.charAt(i+1);
if (d >= 0xDC00 && d <= 0xDFFF) {
harArrayWriter.write(d);
i++;
}
}
}
i++;
} while (i < s.length() && !dontNeedEncoding.get((c = (int) s.charAt(i))));
charArrayWriter.flush();
String str = new String(charArrayWriter.toCharArray());
byte[] ba = str.getBytes(charset);
for (int j = 0; j < ba.length; j++) {
out.append('%');
char ch = Character.forDigit((ba[j] >> 4) & 0xF, 16);
if (Character.isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
ch = Character.forDigit(ba[j] & 0xF, 16);
if (Character.isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
}
charArrayWriter.reset();
needToChange = true;
}
}
return (needToChange? out.toString() : s);
}
}
- java.net.URLEncoder类对空格的处理
- java.net.URLEncoder对空格的处理的问题
- URLDecoder和URLEncoder对空格加号的特殊处理
- java.net 类 URLEncoder
- Java下载文件时处理中文 使用URLEncoder编码后 空格变+号的问题
- Java下载文件时处理中文 使用URLEncoder编码后 空格变+号的问题
- URLEncoder类api_java.net.URLEncoder
- JAVA中URLEncoder函数对特殊字符不处理解决办法
- java.net.URLEncoder翻译
- java.net.URLEncoder
- java.net.URLEncoder
- Java文件下载处理中文名(使用URLEncoder编码及空格变+解决)
- android关于文本字符串进行URLEncoder.encode()编码后 空格 回车的处理
- java URLEncoder 中特殊处理
- java URLEncoder 中特殊处理
- 详解JDK1.6 java.net.URLEncoder包下的超链接编码工具类Encoder
- 详解JDK1.6 java.net.URLEncoder包下的超链接编码工具类Encoder
- 关于android.jar里的java.net.URLEncoder.encode()和jdk里的java.net.URLEncoder.encode()出现的问题
- SQL Server 索引中include的魅力(具有包含性列的索引)
- 值得推荐的iPhone开发资源汇总(2)
- Gcc 编译处理
- 值得推荐的iPhone开发资源汇总(1)
- getRequestURI与getRequestURL的区别
- java.net.URLEncoder类对空格的处理
- 我的心灵鸡汤之--心灵鸡汤--小故事,大道理
- COM组件开发实践(转载)
- 数组综合应用题
- lightinthebox zencart 自动添加商品多图
- C# Process.Start()方法详解
- Ubuntu 12.10升级
- Anadoid开发错误集合 以及小技巧
- Android组件详解