自定义HTTP协议Head中中文乱码问题

2018-10-17  本文已影响0人  XJ2017

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();
}
上一篇下一篇

猜你喜欢

热点阅读