62,616
社区成员
发帖
与我相关
我的任务
分享
package cn.yicha.test;
public class wren4255 {
public final static String HEX_CHARS = "0123456789abcdefABCDEF";
public static void main(String args[]) {
System.out.println(UTF2GB("香"));
}
public static String UTF2GB(String UTFString) {
if (UTFString == null) {
return "";
}
StringBuffer sb = new StringBuffer(UTFString.length());
int origPos = 0;
for (int i = 0; i < UTFString.length();) {
origPos = i;
if ((i + 7) < UTFString.length()) {
if (UTFString.charAt(i) == '&' && UTFString.charAt(++i) == '#'
&& UTFString.charAt(++i) == 'x') {
if (UTFString.charAt(i + 5) == ';') {
if (HEX_CHARS.indexOf(UTFString.charAt(i + 1)) == -1
|| HEX_CHARS.indexOf(UTFString.charAt(i + 2)) == -1
|| HEX_CHARS.indexOf(UTFString.charAt(i + 3)) == -1
|| HEX_CHARS.indexOf(UTFString.charAt(i + 4)) == -1) {
i--;
sb.append(UTFString.charAt(i - 1));
} else {
sb.append((char) Integer.valueOf(
UTFString.substring(++i, i + 4), 16)
.intValue());
i += 5;
}
} else if (UTFString.charAt(i + 3) == ';') {
if (HEX_CHARS.indexOf(UTFString.charAt(i + 1)) == -1
|| HEX_CHARS.indexOf(UTFString.charAt(i + 2)) == -1) {
i--;
sb.append(UTFString.charAt(i - 1));
} else {
sb.append((char) Integer.valueOf(
UTFString.substring(++i, i + 2), 16)
.intValue());
i += 3;
}
} else {
i--;
sb.append(UTFString.charAt(i - 1));
}
} else {
if (origPos == i) {
sb.append(UTFString.charAt(i));
i++;
} else {
sb.append(UTFString.substring(origPos, i));
}
}
} else if ((i + 5) < UTFString.length()) {
if (UTFString.charAt(i) == '&' && UTFString.charAt(++i) == '#'
&& UTFString.charAt(++i) == 'x'
&& UTFString.charAt(i + 3) == ';') {
if (HEX_CHARS.indexOf(UTFString.charAt(i + 1)) == -1
|| HEX_CHARS.indexOf(UTFString.charAt(i + 2)) == -1) {
i--;
sb.append(UTFString.charAt(i - 1));
} else {
sb
.append((char) Integer.valueOf(
UTFString.substring(++i, i + 2), 16)
.intValue());
i += 3;
}
} else {
if (origPos == i) {
sb.append(UTFString.charAt(i));
i++;
} else {
sb.append(UTFString.substring(origPos, i));
}
}
} else {
sb.append(UTFString.charAt(i));
i++;
}
}
return sb.toString();
}
}