当前位置: 首页 > 面试题库 >

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

夹谷晋
2023-03-14
问题内容

我一直在尝试各种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

编辑: 我正在使用Java 1.4即将移至Java 5。


问题答案:

查看实现差异,我发现:

MDCencodeURIComponent()

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

Java
1.5.0文档URLEncoder

  • 文字字符(正则表达式表示): [-a-zA-Z0-9._*]
  • 空格字符" "将转换为加号"+"

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

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


 类似资料:
  • 问题内容: 在JavaScript中: C#应用程序是否等效?为了转义HTML字符,我使用了: 但是我不确定如何将匹配项转换为JS使用的正确十六进制格式。例如此代码: 返回“ 的,而不是它看起来像我需要了分割字符串为字节或东西。 编辑:这是一个Windows应用程序中,唯一可用的项目有:,,和。 问题答案: 或者是转义旨在成为URL一部分的字符串的正确方法。 以字符串为例: -> -> ->也编码

  • 问题内容: PHP 中JavaScript的功能等同于什么? 问题答案: 尝试。或更确切地说: 此函数的工作方式与定义的完全相同: 转义除以下字符外的所有字符:字母,十进制数字,

  • 假设我们有下面的Jade源码: - var title = 'yay' h1.title #{title} p Just an example 当 compileDebug 选项不是false, Jade 会编译时会把函数里加上 __.lineno = n;, 这个参数会在编译出错时传递给rethrow(), 而这个函数会在Jade初始输出时给出一个有用的错误信息。 function anonym

  • 问题内容: 即使其中一个使用后递增,另一个使用前递增,以下for循环也会产生相同的结果。 这是代码: 对于两个“ for”循环,我得到相同的输出。我想念什么吗? 问题答案: 评估或之后,两种情况下的新值i将相同。增量前和增量后的差异是对表达式本身求值的结果。 递增i并评估为的新值。 计算为的旧值,并递增i。 在for循环中这无关紧要的原因是控制流程大致如下所示: 测试条件 如果为假,则终止 如果是

  • 问题内容: 我正在使用具有Spring安全性的BCryptPasswordEncoder。我的期望是,对于相同的输入,我将始终获得相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用以下代码段对其进行测试: 输出:$ 2a $ 10 $ cYLM.qoXpeAzcZhJ3oXRLu9Slkb61LHyWW5qJ4QKvHEMhaxZ5qCPi 输出2:$ 2a $ 10 $ KEvYX9y

  • 使用Java的hashcode函数可以为不同的字符串提供相同的hashcode吗?或者如果有可能,那么可能性的百分比是多少?