public void urlEncode(Writer buf,
String s) throws IOException {
if( c2b==null ) {
bb=new ByteChunk(16); // small enough.
c2b=new C2BConverter( bb, encoding );
}
for (int i = 0; i < s.length(); i++) {
int c = (int) s.charAt(i);
if( safeChars.get( c ) ) {
if( debug > 0 ) log("Safe: " + (char)c);
buf.write((char)c);
} else {
if( debug > 0 ) log("Unsafe: " + (char)c);
c2b.convert( (char)c );
// "surrogate" - UTF is _not_ 16 bit, but 21 !!!!
// ( while UCS is 31 ). Amazing...
if (c >= 0xD800 && c < = 0xDBFF) {
if ( (i+1) < s.length()) {
int d = (int) s.charAt(i+1);
if (d >= 0xDC00 && d < = 0xDFFF) {
if( debug > 0 ) log("Unsafe: " + c);
c2b.convert( (char)d);
i++;
}
}
}
c2b.flushBuffer();
urlEncode( buf, bb.getBuffer(), bb.getOffset(),
bb.getLength() );
bb.recycle();
}
}
}
URL Encode string, using a specified encoding. |