Конвертировать все символы в строке в различные экранированные форматы (Java) - PullRequest
0 голосов
/ 16 июля 2011

Я хочу преобразовать символы в строке в другие экранированные форматы, подобные следующему, где буква «а» - это преобразуемая строка:

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

Я искал, используя различныев методах, но они просто извлекают указанные символы (например, '<') в кодировке url и экранируют их.Я хочу уйти от ВЕСЬ строки.Есть ли способ конвертировать строку в форматы выше в Java (используя встроенные библиотеки, желательно)? </p>

Ответы [ 3 ]

1 голос
/ 16 июля 2011
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); 
}
0 голосов
/ 16 июля 2011

Маловероятно, чтобы существовал библиотечный метод, который делает то, что вы хотите:

  • В каждом из этих примеров экранирование не требуется;например, для буквы «а».Библиотечные методы, которые выполняют экранирование, делают это только в случае необходимости.
  • Библиотеки, которые позволяют вам выполнять экранирование HTML / XML, не позволяют вам выбрать определенный синтаксис экранирования (AFAIK).
  • Ваш третий пример неправильно экранирован.

Вам нужно будет реализовать это самостоятельно.(Код тривиален ... и я предполагаю, что вы способны.)

0 голосов
/ 16 июля 2011

Я не уверен насчет встроенных библиотек, но довольно легко написать метод, чтобы сделать это самостоятельно.Все, что вам нужно сделать, это перебрать строку за символом, и для каждого символа сделайте что-то вроде этого:

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

, а затем добавьте его к новой строке, которую вы делаете, которая имеетвсе символы закодированы.

...