blob: 7050d590d17a9abcd28ccc76ba925aec1a054a2f (
plain)
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
|
// 2008-01-26-00:38
package xtpipes;
public class XtpipesUni{
private static int D800 = Integer.parseInt("D800", 16);
private static int DFFF = Integer.parseInt("DFFF", 16);
private static int DC00 = Integer.parseInt("DC00", 16);
private static int X400 = Integer.parseInt("400",16);
private static int X10000 = Integer.parseInt("10000",16);
public static String toUni( char[] ch, int start, int length,
String filter ){
StringBuffer buf = new StringBuffer(length);
for (int i = 0; i < length; i++) {
int chr = ch[ start + i ];
boolean ascii = (chr == '\n')
|| (chr > 31) && (chr < 127) ;
if( filter.indexOf(chr) > -1 ){ ascii = false; }
if( (chr >= D800) && (chr<= DFFF) ){
chr = ((ch[i] - D800) * X400 + (ch[++i] - DC00)) + X10000;
}
buf.append(
ascii ? Character.toString((char) chr)
: ("&#x"
+ Integer.toHexString(chr).toUpperCase()
+ ";" ) );
}
return new String(buf);
}
public static String toUni( String s, String filter ){
char [] ch = s.toCharArray();
int length = ch.length;
return toUni(ch, 0, length, filter);
}
}
|