You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ������� ������ <ki...@ufanet.ru> on 2001/02/24 08:57:06 UTC

Please add full support UTF-8

method POST

# *****************************************************************
#   replace in javax/servlet/http/HttpUtils.java
# *****************************************************************

    private static String parseName( String data, StringBuffer buf )
    {
  buf.setLength(0);

        for( int i = 0; i < data.length(); i++ )
        {
            char c = data.charAt(i);
            switch(c)
            {
   case 0:
    break;

            case 43: // '+'
                buf.append(' ');
                break;

            case 37: // '%'
                try
                {
     if ( data.length() - i < 3 ) break;
     int b1 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( b1 & 128 ) == 0 )
     {
      buf.append( (char)b1 );
      break;
     }

     if ( data.length() - i < 4 || data.charAt(++i) != '%' ) break;
     int b2 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( ( b1 & 192 ) == 192 ) && ( ( b2 & 128 ) == 128 ) )
     {
      buf.append( (char)( ( ( b1 & 31 ) << 6 ) | ( b2 & 63 ) ) );
      break;
     }

     if ( data.length() - i < 4 || data.charAt(++i) != '%' ) break;
     int b3 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( ( b1 & 192 ) == 192 ) && ( ( b2 & 128 ) == 128 ) && ( ( b3 &
128 ) == 128 ) )
      buf.append((char)( ( ( b1 & 15 ) << 12 ) | ( ( b2 & 63 ) << 6 ) | ( b3
& 63 ) ) );

                    break;
                }
                catch(NumberFormatException _ex)
                {
                    String msg = "Decode error ";
                    throw new IllegalArgumentException(msg);
                }
                catch(StringIndexOutOfBoundsException _ex) {}
                break;

            default:
                buf.append(c);
                break;
            }
        }

        return buf.toString();
    }


method GET

# *****************************************************************
#  replace in org/apache/tomcat/util/RequestUtil.java
# *****************************************************************

    public static String unUrlDecode(String data)
    {
        StringBuffer buf = new StringBuffer();
        for(int i = 0; i < data.length(); i++)
        {
            char c = data.charAt(i);
            switch(c)
            {
            case 43: // '+'
                buf.append(' ');
                break;

            case 37: // '%'
                try
                {
     if ( data.length() - i < 3 ) break;
     int b1 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( b1 & 128 ) == 0 )
     {
      buf.append( (char)b1 );
      break;
     }

     if ( data.length() - i < 4 || data.charAt(++i) != '%' ) break;
     int b2 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( ( b1 & 192 ) == 192 ) && ( ( b2 & 128 ) == 128 ) )
     {
      buf.append( (char)( ( ( b1 & 31 ) << 6 ) | ( b2 & 63 ) ) );
      break;
     }

     if ( data.length() - i < 4 || data.charAt(++i) != '%' ) break;
     int b3 = Integer.parseInt( "" + data.charAt(++i) + data.charAt(++i),
16);

     if ( ( ( b1 & 192 ) == 192 ) && ( ( b2 & 128 ) == 128 ) && ( ( b3 &
128 ) == 128 ) )
      buf.append((char)( ( ( b1 & 15 ) << 12 ) | ( ( b2 & 63 ) << 6 ) | ( b3
& 63 ) ) );

                    break;
                }
                catch(NumberFormatException _ex)
                {
                    String msg = "Decode error ";
                    throw new IllegalArgumentException(msg);
                }
                catch(StringIndexOutOfBoundsException _ex) {}
                break;

            default:
                buf.append(c);
                break;
            }
        }

        return buf.toString();
    }