HTTP协议Head中规范是使用ASCII字符集(ASCII 码使用指定的7 位或8 位组合来表示128 或256 种可能的字符)进行编码的,ASCII字符集不包含中文,需要先将其它编码转换为ASCII字符集再由ASCII字符集转换为用户指定编码表示的中文。
/**
* 将UTF-8编码的字符串转换为用Ascii表达的字符串
*
* @param originStr
* @return
*/
public static String stringToAscii(String originStr) {
if (StringUtil.isBlank(originStr)) {
return "";
}
StringBuilder sb = new StringBuilder();
char[] charArray = originStr.toCharArray();
for (char c : charArray) {
if (c < 255) { // MAX_CHAR_VALUE
sb.append(c);
} else {
sb.append("\\u").append(Integer.toHexString(c).toUpperCase());
}
}
return sb.toString();
}
/**
* 将Ascii表达的字符串转换为UTF-8
*
* @param originStr
* @return
*/
public static String asciiToString(String originStr) {
StringBuilder sb = new StringBuilder();
if (StringUtil.isNotEmpty(originStr)) {
boolean isFirstAscii = originStr.indexOf("\\u") == 0 ? true : false;
String[] asciiStr = originStr.split("\\\\u");
for (int i = 0; i < asciiStr.length; i++) {
if (i == 0) {
if (isFirstAscii)
continue;
else
sb.append(asciiStr[i]);
} else {
sb.append((char)Integer.parseInt(asciiStr[i].substring(0, 4), 16));
sb.append(asciiStr[i].substring(4));
}
}
}
return sb.toString();
}
网友评论