package com.whyc.util.tool; import java.util.Locale; import android.util.Log; public class URLtoUTF8 { private static final String TAG = "URLtoUTF8"; // 转换为%E4%BD%A0形式 public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = String.valueOf(c).getBytes("utf-8"); } catch (Exception ex) { Log.d(TAG, ex.toString()); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase(Locale.getDefault())); } } } return sb.toString(); } // 将%E4%BD%A0转换为汉字 public static String unescape(String s) { StringBuffer sbuf = new StringBuffer(); int l = s.length(); int ch = -1; int b, sumb = 0; for (int i = 0, more = -1; i < l; i++) { switch (ch = s.charAt(i)) { case '%': ch = s.charAt(++i); int hb = (Character.isDigit((char) ch) ? ch - '0' : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF; ch = s.charAt(++i); int lb = (Character.isDigit((char) ch) ? ch - '0' : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF; b = (hb << 4) | lb; break; case '+': b = ' '; break; default: b = ch; } if ((b & 0xc0) == 0x80) { sumb = (sumb << 6) | (b & 0x3f); if (--more == 0) sbuf.append((char) sumb); } else if ((b & 0x80) == 0x00) { sbuf.append((char) b); } else if ((b & 0xe0) == 0xc0) { sumb = b & 0x1f; more = 1; } else if ((b & 0xf0) == 0xe0) { sumb = b & 0x0f; more = 2; } else if ((b & 0xf8) == 0xf0) { sumb = b & 0x07; more = 3; } else if ((b & 0xfc) == 0xf8) { sumb = b & 0x03; more = 4; } else { sumb = b & 0x01; more = 5; } } return sbuf.toString(); } }