| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| package org.apache.commons.codec.net; |
| |
| import java.io.UnsupportedEncodingException; |
| |
| import org.apache.commons.codec.CharEncoding; |
| import org.apache.commons.codec.DecoderException; |
| import org.apache.commons.codec.EncoderException; |
| import org.apache.commons.codec.StringDecoder; |
| import org.apache.commons.codec.StringEncoder; |
| import org.apache.commons.codec.binary.Base64; |
| |
| /** |
| * <p> |
| * Identical to the Base64 encoding defined by <a href="http://www.ietf.org/rfc/rfc1521.txt">RFC |
| * 1521</a> and allows a character set to be specified. |
| * </p> |
| * |
| * <p> |
| * <a href="http://www.ietf.org/rfc/rfc1522.txt">RFC 1522</a> describes techniques to allow the encoding of non-ASCII |
| * text in various portions of a RFC 822 [2] message header, in a manner which is unlikely to confuse existing message |
| * handling software. |
| * </p> |
| * |
| * @see <a href="http://www.ietf.org/rfc/rfc1522.txt">MIME (Multipurpose Internet Mail Extensions) Part Two: Message |
| * Header Extensions for Non-ASCII Text</a> |
| * |
| * @author Apache Software Foundation |
| * @since 1.3 |
| * @version $Id$ |
| */ |
| public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder { |
| /** |
| * The default charset used for string decoding and encoding. |
| */ |
| private final String charset; |
| |
| /** |
| * Default constructor. |
| */ |
| public BCodec() { |
| this(CharEncoding.UTF_8); |
| } |
| |
| /** |
| * Constructor which allows for the selection of a default charset |
| * |
| * @param charset |
| * the default string charset to use. |
| * |
| * @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a> |
| */ |
| public BCodec(final String charset) { |
| super(); |
| this.charset = charset; |
| } |
| |
| @Override |
| protected String getEncoding() { |
| return "B"; |
| } |
| |
| @Override |
| protected byte[] doEncoding(byte[] bytes) { |
| if (bytes == null) { |
| return null; |
| } |
| return Base64.encodeBase64(bytes); |
| } |
| |
| @Override |
| protected byte[] doDecoding(byte[] bytes) { |
| if (bytes == null) { |
| return null; |
| } |
| return Base64.decodeBase64(bytes); |
| } |
| |
| /** |
| * Encodes a string into its Base64 form using the specified charset. Unsafe characters are escaped. |
| * |
| * @param value |
| * string to convert to Base64 form |
| * @param charset |
| * the charset for <code>value</code> |
| * @return Base64 string |
| * |
| * @throws EncoderException |
| * thrown if a failure condition is encountered during the encoding process. |
| */ |
| public String encode(final String value, final String charset) throws EncoderException { |
| if (value == null) { |
| return null; |
| } |
| try { |
| return encodeText(value, charset); |
| } catch (UnsupportedEncodingException e) { |
| throw new EncoderException(e.getMessage(), e); |
| } |
| } |
| |
| /** |
| * Encodes a string into its Base64 form using the default charset. Unsafe characters are escaped. |
| * |
| * @param value |
| * string to convert to Base64 form |
| * @return Base64 string |
| * |
| * @throws EncoderException |
| * thrown if a failure condition is encountered during the encoding process. |
| */ |
| public String encode(String value) throws EncoderException { |
| if (value == null) { |
| return null; |
| } |
| return encode(value, getDefaultCharset()); |
| } |
| |
| /** |
| * Decodes a Base64 string into its original form. Escaped characters are converted back to their original |
| * representation. |
| * |
| * @param value |
| * Base64 string to convert into its original form |
| * @return original string |
| * @throws DecoderException |
| * A decoder exception is thrown if a failure condition is encountered during the decode process. |
| */ |
| public String decode(String value) throws DecoderException { |
| if (value == null) { |
| return null; |
| } |
| try { |
| return decodeText(value); |
| } catch (UnsupportedEncodingException e) { |
| throw new DecoderException(e.getMessage(), e); |
| } |
| } |
| |
| /** |
| * The default charset used for string decoding and encoding. |
| * |
| * @return the default string charset. |
| */ |
| public String getDefaultCharset() { |
| return this.charset; |
| } |
| } |