编码方式示例:
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6 );
for (i = 0 ; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256 ) {
tmp.append( "%" );
if (j < 16 )
tmp.append( "0" );
tmp.append(Integer.toString(j, 16 ));
} else {
tmp.append( "%u" );
tmp.append(Integer.toString(j, 16 ));
}
}
return tmp.toString();
}解码方式示例:
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0 , pos = 0 ;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf( "%" , lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1 ) == 'u') {
ch = ( char ) Integer.parseInt(src
.substring(pos + 2 , pos + 6 ), 16 );
tmp.append(ch);
lastPos = pos + 6 ;
} else {
ch = ( char ) Integer.parseInt(src
.substring(pos + 1 , pos + 3 ), 16 );
tmp.append(ch);
lastPos = pos + 3 ;
}
} else {
if (pos == - 1 ) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6 );
for (i = 0 ; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256 ) {
tmp.append( "%" );
if (j < 16 )
tmp.append( "0" );
tmp.append(Integer.toString(j, 16 ));
} else {
tmp.append( "%u" );
tmp.append(Integer.toString(j, 16 ));
}
}
return tmp.toString();
}解码方式示例:
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0 , pos = 0 ;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf( "%" , lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1 ) == 'u') {
ch = ( char ) Integer.parseInt(src
.substring(pos + 2 , pos + 6 ), 16 );
tmp.append(ch);
lastPos = pos + 6 ;
} else {
ch = ( char ) Integer.parseInt(src
.substring(pos + 1 , pos + 3 ), 16 );
tmp.append(ch);
lastPos = pos + 3 ;
}
} else {
if (pos == - 1 ) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
{
int i;
char j;
StringBuilder tmp = new StringBuilder();
for (i = 0; i < src.Length; i++)
{
j = src[i];
if (Char.IsDigit(j) || Char.IsLower(j)
|| Char.IsUpper(j))
tmp.Append(j);
else if (j < 256)
{
tmp.Append("%");
if (j < 16)
tmp.Append("0");
tmp.Append(((int)j).ToString("X"));
}
else
{
tmp.Append("%u");
tmp.Append(((int)j).ToString("X"));
}
}
return tmp.ToString();
}
public static string unescape(string src)
{
StringBuilder tmp = new StringBuilder();
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.Length)
{
pos = src.IndexOf("%", lastPos);
if (pos == lastPos)
{
if (src[pos + 1] == 'u')
{
ch = (char)Convert.ToInt32(src.Substring(pos + 2, 4), 16);
tmp.Append(ch);
lastPos = pos + 6;
}
else
{
ch = (char)Convert.ToInt32(src
.Substring(pos + 1, 2), 16);
tmp.Append(ch);
lastPos = pos + 3;
}
}
else
{
if (pos == -1)
{
tmp.Append(src.Substring(lastPos));
lastPos = src.Length;
}
else
{
tmp.Append(src.Substring(lastPos, pos - lastPos));
lastPos = pos;
}
}
}
return tmp.ToString();
}