为了账号安全,请及时绑定邮箱和手机立即绑定

Java与产生相同输出的JavaScript的encodeURIComponent等效吗?

Java与产生相同输出的JavaScript的encodeURIComponent等效吗?

幕布斯6054654 2019-11-25 10:24:24
我一直在尝试各种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 +%22getBytes返回“ A” B±“靠近,但没有雪茄!使用Java编码UTF-8字符串以使其产生与JavaScript相同的输出的最佳方法是什么encodeURIComponent?编辑:我正在使用Java 1.4即将移至Java 5。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

查看实现差异,我发现:


MDCencodeURIComponent():


文字字符(正则表达式表示): [-a-zA-Z0-9._*~'()!]

Java 1.5.0文档URLEncoder:


文字字符(正则表达式表示): [-a-zA-Z0-9._*]

空格字符" "将转换为加号"+"。

因此,基本上,要获得所需的结果,请使用URLEncoder.encode(s, "UTF-8")然后进行一些后处理:


替换所有出现的"+"与"%20"

替换所有"%xx"代表[~'()!]其文字对应部分的所有出现


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 462 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信