美文网首页
自定义HTTP协议Head中中文乱码问题

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

作者: XJ2017 | 来源:发表于2018-10-17 19:32 被阅读0次

    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();
    }

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/sparzftx.html