⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 urlencoded.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        if (key!=null)                        {                            buffer.append((byte)b);                            break;                        }                        key = buffer.toString();                        buffer.reset();                        break;                                            case '+':                        buffer.append((byte)' ');                        break;                                            case '%':                        int dh=in.read();                        int dl=in.read();                        if (dh<0||dl<0)                            break;                        buffer.append((byte)((TypeUtil.convertHexDigit((byte)dh)<<4) + TypeUtil.convertHexDigit((byte)dl)));                        break;                    default:                        buffer.append((byte)b);                    break;                }                if (maxLength>=0 && (++totalLength > maxLength))                    throw new IllegalStateException("Form too large");            }                        if (key != null)            {                value = buffer.length()==0?"":buffer.toString();                buffer.reset();                map.add(key,value);            }            else if (buffer.length()>0)            {                map.add(buffer.toString(), "");            }        }    }        /* -------------------------------------------------------------- */    public static void decodeUtf16To(InputStream in, MultiMap map, int maxLength) throws IOException    {        InputStreamReader input = new InputStreamReader(in,StringUtil.__UTF16);        StringBuffer buf = new StringBuffer();        int c;        int length=0;        if (maxLength<0)            maxLength=Integer.MAX_VALUE;        while ((c=input.read())>0 && length++<maxLength)            buf.append((char)c);        decodeTo(buf.toString(),map,StringUtil.__UTF8);    }        /* -------------------------------------------------------------- */    /** Decoded parameters to Map.     * @param in the stream containing the encoded parameters     */    public static void decodeTo(InputStream in, MultiMap map, String charset, int maxLength)    throws IOException    {        if (charset==null || StringUtil.__ISO_8859_1.equals(charset))        {            decode88591To(in,map,maxLength);            return;        }        if (StringUtil.__UTF8.equalsIgnoreCase(charset))        {            decodeUtf8To(in,map,maxLength);            return;        }        if (StringUtil.__UTF16.equalsIgnoreCase(charset)) // Should be all 2 byte encodings        {            decodeUtf16To(in,map,maxLength);            return;        }                synchronized(map)        {            String key = null;            String value = null;                        int c;            int digit=0;            int digits=0;                        int totalLength = 0;            ByteArrayOutputStream2 output = new ByteArrayOutputStream2();                        int size=0;                        while ((c=in.read())>0)            {                switch ((char) c)                {                    case '&':                        size=output.size();                        value = size==0?"":output.toString(charset);                        output.setCount(0);                        if (key != null)                        {                            map.add(key,value);                        }                        else if (value!=null&&value.length()>0)                        {                            map.add(value,"");                        }                        key = null;                        value=null;                        break;                    case '=':                        if (key!=null)                        {                            output.write(c);                            break;                        }                        size=output.size();                        key = size==0?"":output.toString(charset);                        output.setCount(0);                        break;                    case '+':                        output.write(' ');                        break;                    case '%':                        digits=2;                        break;                    default:                        if (digits==2)                        {                            digit=TypeUtil.convertHexDigit((byte)c);                            digits=1;                        }                        else if (digits==1)                        {                            output.write((digit<<4) + TypeUtil.convertHexDigit((byte)c));                            digits=0;                        }                        else                            output.write(c);                    break;                }                                totalLength++;                if (maxLength>=0 && totalLength > maxLength)                    throw new IllegalStateException("Form too large");            }            size=output.size();            if (key != null)            {                value = size==0?"":output.toString(charset);                output.setCount(0);                map.add(key,value);            }            else if (size>0)                map.add(output.toString(charset),"");        }    }        /* -------------------------------------------------------------- */    /** Decode String with % encoding.     * This method makes the assumption that the majority of calls     * will need no decoding.     */    public static String decodeString(String encoded,int offset,int length,String charset)    {        if (charset==null || StringUtil.isUTF8(charset))        {            Utf8StringBuffer buffer=null;            for (int i=0;i<length;i++)            {                char c = encoded.charAt(offset+i);                if (c<0||c>0xff)                {                    if (buffer==null)                    {                        buffer=new Utf8StringBuffer(length);                        buffer.getStringBuffer().append(encoded,offset,offset+i+1);                    }                    else                        buffer.getStringBuffer().append(c);                }                else if (c=='+')                {                    if (buffer==null)                    {                        buffer=new Utf8StringBuffer(length);                        buffer.getStringBuffer().append(encoded,offset,offset+i);                    }                                        buffer.getStringBuffer().append(' ');                }                else if (c=='%' && (i+2)<length)                {                    if (buffer==null)                    {                        buffer=new Utf8StringBuffer(length);                        buffer.getStringBuffer().append(encoded,offset,offset+i);                    }                    while(c=='%' && (i+2)<length)                    {                        try                        {                            byte b=(byte)TypeUtil.parseInt(encoded,offset+i+1,2,16);                            buffer.append(b);                            i+=3;                        }                        catch(NumberFormatException nfe)                        {                            buffer.getStringBuffer().append('%');                            for(char next; ((next=encoded.charAt(++i+offset))!='%');)                                buffer.getStringBuffer().append((next=='+' ? ' ' : next));                        }                        if (i<length)                            c = encoded.charAt(offset+i);                    }                    i--;                }                else if (buffer!=null)                    buffer.getStringBuffer().append(c);            }            if (buffer==null)            {                if (offset==0 && encoded.length()==length)                    return encoded;                return encoded.substring(offset,offset+length);            }            return buffer.toString();        }        else        {            StringBuffer buffer=null;            try            {                for (int i=0;i<length;i++)                {                    char c = encoded.charAt(offset+i);                    if (c<0||c>0xff)                    {                        if (buffer==null)                        {                            buffer=new StringBuffer(length);                            buffer.append(encoded,offset,offset+i+1);                        }                        else                            buffer.append(c);                    }                    else if (c=='+')                    {                        if (buffer==null)                        {                            buffer=new StringBuffer(length);                            buffer.append(encoded,offset,offset+i);                        }                                                buffer.append(' ');                    }                    else if (c=='%' && (i+2)<length)                    {                        if (buffer==null)                        {                            buffer=new StringBuffer(length);                            buffer.append(encoded,offset,offset+i);                        }                        byte[] ba=new byte[length];                        int n=0;                        while(c>=0 && c<=0xff)                        {                            if (c=='%')                            {                                   if(i+2<length)                                {                                    try                                    {                                        ba[n++]=(byte)TypeUtil.parseInt(encoded,offset+i+1,2,16);                                        i+=3;                                    }                                    catch(NumberFormatException nfe)                                    {                                                                                ba[n-1] = (byte)'%';                                                                            for(char next; ((next=encoded.charAt(++i+offset))!='%');)                                            ba[n++] = (byte)(next=='+' ? ' ' : next);                                    }                                }                                else                                {                                    ba[n++] = (byte)'%';                                    i++;                                }                            }                            else if (c=='+')                            {                                ba[n++]=(byte)' ';                                i++;                            }                            else                            {                                ba[n++]=(byte)c;                                i++;                            }                                                        if (i>=length)                                break;                            c = encoded.charAt(offset+i);                        }                        i--;                        buffer.append(new String(ba,0,n,charset));                    }                    else if (buffer!=null)                        buffer.append(c);                }                if (buffer==null)                {                    if (offset==0 && encoded.length()==length)                        return encoded;                    return encoded.substring(offset,offset+length);                }                return buffer.toString();            }            catch (UnsupportedEncodingException e)            {                throw new RuntimeException(e);            }        }            }        /* ------------------------------------------------------------ */    /** Perform URL encoding.     * Assumes 8859 charset     * @param string      * @return encoded string.     */    public static String encodeString(String string)    {        return encodeString(string,StringUtil.__UTF8);    }        /* ------------------------------------------------------------ */    /** Perform URL encoding.     * @param string      * @return encoded string.     */    public static String encodeString(String string,String charset)    {        if (charset==null)            charset=StringUtil.__UTF8;        byte[] bytes=null;        try        {            bytes=string.getBytes(charset);        }        catch(UnsupportedEncodingException e)        {            // Log.warn(LogSupport.EXCEPTION,e);            bytes=string.getBytes();        }                int len=bytes.length;        byte[] encoded= new byte[bytes.length*3];        int n=0;        boolean noEncode=true;                for (int i=0;i<len;i++)        {            byte b = bytes[i];                        if (b==' ')            {                noEncode=false;                encoded[n++]=(byte)'+';            }            else if (b>='a' && b<='z' ||                     b>='A' && b<='Z' ||                     b>='0' && b<='9')            {                encoded[n++]=b;            }            else            {                noEncode=false;                encoded[n++]=(byte)'%';                byte nibble= (byte) ((b&0xf0)>>4);                if (nibble>=10)                    encoded[n++]=(byte)('A'+nibble-10);                else                    encoded[n++]=(byte)('0'+nibble);                nibble= (byte) (b&0xf);                if (nibble>=10)                    encoded[n++]=(byte)('A'+nibble-10);                else                    encoded[n++]=(byte)('0'+nibble);            }        }        if (noEncode)            return string;                try        {                return new String(encoded,0,n,charset);        }        catch(UnsupportedEncodingException e)        {            // Log.warn(LogSupport.EXCEPTION,e);            return new String(encoded,0,n);        }    }    /* ------------------------------------------------------------ */    /**      */    public Object clone()    {        return new UrlEncoded(this);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -