Here you can find the source of decodeString(String s, String charset)
Parameter | Description |
---|---|
s | a Base64 String to be decoded. |
charset | when convert byte array to string use this charset |
Parameter | Description |
---|---|
IllegalArgumentException | if the input is not valid Base64 encoded data. |
public static String decodeString(String s, String charset) throws UnsupportedEncodingException
//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; } }