RelaxedUTF8Decoder.java 1.32 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.day.crx.explorer.impl.j2ee;

public class RelaxedUTF8Decoder {
    public static String unescape(String input) {
        StringBuffer out = new StringBuffer();
        long u = 0;
        int ul = 0;
        for (int i = 0; i < input.length(); ++i) {
            long b = input.charAt(i) % 255;
            if (b == 37) {
                try {
                    b = Long.parseLong(input.substring(i + 1, i + 3), 16);
                }
                catch (NumberFormatException e) {
                    throw new IllegalArgumentException();
                }
                i += 2;
            }
            if (ul == 0) {
                if ((b & 224) == 192) {
                    ul = 1;
                    u = b & 31;
                    continue;
                }
                if ((b & 240) == 224) {
                    ul = 2;
                    u = b & 15;
                    continue;
                }
                if ((b & 248) == 240) {
                    ul = 3;
                    u = b & 7;
                    continue;
                }
                out.append((char)b);
                continue;
            }
            u = u << 6 | b & 63;
            if (--ul != 0) continue;
            out.append((char)u);
        }
        return out.toString();
    }
}