我一直在尝试各种Java代码,试图提出一些将对包含引号,空格和“奇异” Unicode字符的字符串进行编码的东西,并产生与JavaScript的encodeURIComponent函数相同的输出。
我的酷刑测试字符串是: “ A” B±“
如果我在Firebug中输入以下JavaScript语句:
encodeURIComponent('"A" B ± "');
—然后我得到:
"%22A%22%20B%20%C2%B1%20%22"
这是我的小测试Java程序:
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class EncodingTest { public static void main(String[] args) throws UnsupportedEncodingException { String s = "\"A\" B ± \""; System.out.println("URLEncoder.encode returns " + URLEncoder.encode(s, "UTF-8")); System.out.println("getBytes returns " + new String(s.getBytes("UTF-8"), "ISO-8859-1")); } }
—该程序输出:
URLEncoder.encode返回%22A%22 + B +%C2%B1 +%22 getBytes返回“ A” B±“
靠近,但没有雪茄!使用Java编码UTF-8字符串以使其产生与JavaScript相同的输出的最佳方法是什么encodeURIComponent?
encodeURIComponent
编辑: 我正在使用Java 1.4即将移至Java 5。
查看实现差异,我发现:
MDCencodeURIComponent():
encodeURIComponent()
[-a-zA-Z0-9._*~'()!]
Java 1.5.0文档URLEncoder:
URLEncoder
[-a-zA-Z0-9._*]
" "
"+"
因此,基本上,要获得所需的结果,请使用URLEncoder.encode(s, "UTF-8")然后进行一些后处理:
URLEncoder.encode(s, "UTF-8")
"%20"
"%xx"
[~'()!]