RelaxedUTF8Decoder.java
1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
* 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();
}
}