Java ME平台中的URLEncoder实现类 - 编程入门网
xternal encoding before hex conversion
try {
if (wroteUnencodedChar) { // Fix for 4407610
writer = new OutputStreamWriter(buf, enc);
wroteUnencodedChar = false;
}
if(writer != null)
writer.write(c);
/*
* If this character represents the start of a Unicode
* surrogate pair, then pass in two characters. It''s not
* clear what should be done if a bytes reserved in the
* surrogate pairs range occurs outside of a legal
* surrogate pair. For now, just treat it as if it were
* any other character.
*/
if (c >= 0xD800 && c <= 0xDBFF) {
/*
System.out.println(Integer.toHexString(c)
+ " is high surrogate");
*/
if ( (i+1) < s.length()) {
int d = (int) s.charAt(i+1);
/*
System.out.println("\tExamining "
+ Integer.toHexString(d));
*/
if (d >= 0xDC00 && d <= 0xDFFF) {
/*
System.out.println("\t"
+ Integer.toHexString(d)
+ " is low surrogate");
*/
writer.write(d);
i++;
}
}
}
writer.flush();
} catch(IOException e) {
buf.reset();
continue;
}
byte[] ba = buf.toByteArray();
for (int j = 0; j < ba.length; j++) {
out.append(''%'');
char ch = forDigit((ba[j] >> 4) & 0xF, 16);
if (isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
ch = forDigit((ba[j] & 0xF), 16); //ch = forDigit(ba[j] & 0xF, 16); if (isLetter(ch)) { ch -= caseDiff; } out.append(ch); } buf.reset(); needToChange = true; } } return (needToChange? out.toString() : s); } private static boolean isLetter(char c){ if( (c >= ''a'' && c <= ''z'') || (c >=''A'' && c <= ''Z'')) return true; return false; } private static char forDigit(int digit,int radix){ if ((digit >= radix) || (digit < 0)) { return ''\0''; } if ((radix < MIN_RADIX) || (radix > MAX_RADIX)) { return ''\0''; } if (digit < 10) { return (char)(''0'' + digit); } return (char)(''a'' - 10 + digit); } } |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |