# Class UDecoder

java.lang.Object
org.apache.tomcat.util.buf.UDecoder

public final class UDecoder extends Object
All URL decoding happens here. This way we can reuse, review, optimize without adding complexity to the buffers. The conversion will modify the original buffer.

## Constructor Summary

Constructors
Constructor
Description
`UDecoder()`

## Method Summary

Modifier and Type
Method
Description
`void`
`convert(ByteChunk mb, boolean query)`
URLDecode, will modify the source.
`void`
`convert(ByteChunk mb, EncodedSolidusHandling encodedSolidusHandling)`
Deprecated.
Unused.
`void`
`convert(ByteChunk mb, EncodedSolidusHandling encodedSolidusHandling, EncodedSolidusHandling encodedReverseSolidusHandling)`
URLDecode, will modify the source.
`static String`
`URLDecode(String str, Charset charset)`
Decode and return the specified URL-encoded String.
`static String`
`URLDecode(String str, Charset charset, EncodedSolidusHandling encodedSolidusHandling, EncodedSolidusHandling encodedReverseSolidusHandling)`
Decode and return the specified URL-encoded String.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### UDecoder

public UDecoder()

## Method Details

### convert

public void convert(ByteChunk mb, boolean query) throws IOException
URLDecode, will modify the source. Assumes source bytes are encoded using a superset of US-ASCII as per RFC 7230. "%5c" will be decoded. "%2f" will be rejected unless the input is a query string.

Parameters:
  `mb` - The URL encoded bytes
  `query` - `true` if this is a query string. For a query string '+' will be decoded to ' '
Throws:
  `IOException` - Invalid %xx URL encoding

### convert

@Deprecated public void convert(ByteChunk mb, EncodedSolidusHandling encodedSolidusHandling) throws IOException
Deprecated.
Unused. Will be removed in Tomcat 12. Use `convert(ByteChunk, EncodedSolidusHandling, EncodedSolidusHandling)`
URLDecode, will modify the source. Assumes source bytes are encoded using a superset of US-ASCII as per RFC 7230.

Parameters:
  `mb` - The URL encoded bytes
  `encodedSolidusHandling` - How should the %2f sequence handled by the decoder? For query strings this parameter will be ignored and the %2f sequence will be decoded
Throws:
  `IOException` - Invalid %xx URL encoding

### convert

public void convert(ByteChunk mb, EncodedSolidusHandling encodedSolidusHandling, EncodedSolidusHandling encodedReverseSolidusHandling) throws IOException
URLDecode, will modify the source. Assumes source bytes are encoded using a superset of US-ASCII as per RFC 7230.

Parameters:
  `mb` - The URL encoded bytes
  `encodedSolidusHandling` - How should the %2f sequence handled by the decoder?
  `encodedReverseSolidusHandling` - How should the %5c sequence handled by the decoder?
Throws:
  `IOException` - Invalid %xx URL encoding

### URLDecode

public static String URLDecode(String str, Charset charset)
Decode and return the specified URL-encoded String. It is assumed the string is not a query string.

Parameters:
  `str` - The url-encoded string
  `charset` - The character encoding to use; if null, UTF-8 is used.
Returns:
  the decoded string
Throws:
  `IllegalArgumentException` - if a '%' character is not followed by a valid 2-digit hexadecimal number

### URLDecode

public static String URLDecode(String str, Charset charset, EncodedSolidusHandling encodedSolidusHandling, EncodedSolidusHandling encodedReverseSolidusHandling)
Decode and return the specified URL-encoded String. It is assumed the string is not a query string.

Parameters:
  `str` - The url-encoded string
  `charset` - The character encoding to use; if null, UTF-8 is used.
  `encodedSolidusHandling` - The required handling of encoded solidus (%2f - /)
  `encodedReverseSolidusHandling` - The required handling of encoded reverse solidus (%5c - \)
Returns:
  the decoded string
Throws:
  `IllegalArgumentException` - if a '%' character is not followed by a valid 2-digit hexadecimal number