Java String Decode decodeString(String s, String charset)

Here you can find the source of decodeString(String s, String charset)

Description

Decodes a string from Base64 format.

License

Apache License

Parameter

Parameter Description
s a Base64 String to be decoded.
charset when convert byte array to string use this charset

Exception

Parameter Description
IllegalArgumentException if the input is not valid Base64 encoded data.

Return

A String containing the decoded data.

Declaration

public static String decodeString(String s, String charset) throws UnsupportedEncodingException 

Method Source Code


//package com.java2s;
/*/*from   w ww . j  a v  a2s .co  m*/
 * Copyright 2011 Alexander V. Zinin
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.io.UnsupportedEncodingException;

public class Main {
    private static final String DEFAULT_CHARSET = "utf-8";
    private static byte[] map2 = new byte[128];

    /**
     * Decodes a string from Base64 format.
     *
     * @param s       a Base64 String to be decoded.
     * @param charset when convert byte array to string use this charset
     *
     * @return A String containing the decoded data.
     *
     * @throws IllegalArgumentException if the input is not valid Base64 encoded data.
     * @throws java.io.UnsupportedEncodingException
     *                                  if specified charset not supported
     */
    public static String decodeString(String s, String charset) throws UnsupportedEncodingException {
        return new String(decode(s), charset);
    }

    /**
     * Invoke {@link Base64Util#decodeString(String, String)} with {@link Base64Util#DEFAULT_CHARSET}
     *
     * @param s a Base64 String to be decoded.
     *
     * @return A String containing the decoded data.
     */
    public static String decodeString(String s) {
        try {
            return decodeString(s, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Decodes a byte array from Base64 format.
     *
     * @param s a Base64 String to be decoded.
     *
     * @return An array containing the decoded data bytes.
     *
     * @throws IllegalArgumentException if the input is not valid Base64 encoded data.
     */
    public static byte[] decode(String s) {
        return decode(s.toCharArray());
    }

    /**
     * Decodes a byte array from Base64 format.
     * No blanks or line breaks are allowed within the Base64 encoded data.
     *
     * @param in a character array containing the Base64 encoded data.
     *
     * @return An array containing the decoded data bytes.
     *
     * @throws IllegalArgumentException if the input is not valid Base64 encoded data.
     */
    public static byte[] decode(char[] in) {
        int iLen = in.length;
        if (iLen % 4 != 0) {
            throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
        }
        while (iLen > 0 && in[iLen - 1] == '=') {
            iLen--;
        }
        int oLen = (iLen * 3) / 4;
        byte[] out = new byte[oLen];
        int ip = 0;
        int op = 0;
        while (ip < iLen) {
            int i0 = in[ip++];
            int i1 = in[ip++];
            int i2 = ip < iLen ? in[ip++] : 'A';
            int i3 = ip < iLen ? in[ip++] : 'A';
            if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) {
                throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
            }
            int b0 = map2[i0];
            int b1 = map2[i1];
            int b2 = map2[i2];
            int b3 = map2[i3];
            if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) {
                throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
            }
            int o0 = (b0 << 2) | (b1 >>> 4);
            int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
            int o2 = ((b2 & 3) << 6) | b3;
            out[op++] = (byte) o0;
            if (op < oLen) {
                out[op++] = (byte) o1;
            }
            if (op < oLen) {
                out[op++] = (byte) o2;
            }
        }
        return out;
    }
}

Related

  1. decode(String string, String encoding)
  2. decode(String text)
  3. decode(String value, String encoding)
  4. decode3(String str)
  5. decodeString(String s)
  6. decodeString(String s, String encoding)
  7. decodeString(String str)
  8. decodeString(String str)
  9. decodeString(StringReader in)