将字符串中的所有字符转换为不同的转义格式(Java)

时间:2011-07-16 01:48:18

标签: java decimal hex url-encoding html-encode

我希望将字符串中的字符转换为不同的转义格式,如下所示,其中字母“a”是要转换的字符串:

hex-url: %61
hex-html: a
decimal-html: &#97

我搜索过使用了各种内置方法,但它们只是取出了url-encoding指定的字符(比如'<')并将其转义。我想逃避整个字符串。有没有办法将字符串转换为java中的上述格式(使用内置库,最好)?

3 个答案:

答案 0 :(得分:1)

public class StringEncoders
{
    static public void main(String[] args)
    {
        System.out.println("hex-url: " + hexUrlEncode("a"));
        System.out.println("hex-html: " + hexHtmlEncode("a"));
        System.out.println("decimal-html: " + decimalHtmlEncode("a"));
    }
    static public String hexUrlEncode(String str)   {
        return encode(str, hexUrlEncoder);
    }
    static public String hexHtmlEncode(String str)  {
        return encode(str, hexHtmlEncoder);
    }
    static public String decimalHtmlEncode(String str)  {
        return encode(str, decimalHtmlEncoder);
    }
    static private String encode(String str, CharEncoder encoder)
    {
        StringBuilder buff = new StringBuilder();
        for ( int i = 0; i < str.length(); i++)
            encoder.encode(str.charAt(i), buff);
        return ""+buff;
    }
    private static class CharEncoder
    {
        String prefix, suffix;
        int radix;
        public CharEncoder(String prefix, String suffix, int radix)        {
            this.prefix = prefix;
            this.suffix = suffix;
            this.radix = radix;
        }
        void encode(char c, StringBuilder buff)     {
            buff.append(prefix).append(Integer.toString(c, radix)).append(suffix);
        }
    }
    static final CharEncoder hexUrlEncoder = new CharEncoder("%","",16);
    static final CharEncoder hexHtmlEncoder = new CharEncoder("&#x",";",16);
    static final CharEncoder decimalHtmlEncoder = new CharEncoder("&#",";",10); 
}

答案 1 :(得分:0)

我不确定内置库,但是编写一个方法来自己编写它很容易。您需要做的就是逐个字符地循环字符串,并为每个字符执行以下操作:

"&#"+Integer.toHexString(character)+";";

然后将其附加到您正在制作的新字符串中,该字符串包含所有已编码的字符。

答案 2 :(得分:0)

现有的库方法不可能达到您想要的效果:

  • 在每个例子中,逃避都是不必要的;例如为'a'字母。只有在必要时才会执行转义的库方法。
  • 允许您进行HTML / XML转义的库不允许您选择特定的转义语法(AFAIK)。
  • 您的第三个示例被错误地转义。

您需要自己实施。 (代码很简单......我假设你有能力。)