View Javadoc

1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  package org.apache.http.util;
28  
29  import java.io.UnsupportedEncodingException;
30  
31  import org.apache.http.Consts;
32  
33  /**
34   * The home for utility methods that handle various encoding tasks.
35   *
36   *
37   * @since 4.0
38   */
39  public final class EncodingUtils {
40  
41      /**
42       * Converts the byte array of HTTP content characters to a string. If
43       * the specified charset is not supported, default system encoding
44       * is used.
45       *
46       * @param data the byte array to be encoded
47       * @param offset the index of the first byte to encode
48       * @param length the number of bytes to encode
49       * @param charset the desired character encoding
50       * @return The result of the conversion.
51       */
52      public static String getString(
53          final byte[] data,
54          final int offset,
55          final int length,
56          final String charset) {
57          Args.notNull(data, "Input");
58          Args.notEmpty(charset, "Charset");
59          try {
60              return new String(data, offset, length, charset);
61          } catch (final UnsupportedEncodingException e) {
62              return new String(data, offset, length);
63          }
64      }
65  
66  
67      /**
68       * Converts the byte array of HTTP content characters to a string. If
69       * the specified charset is not supported, default system encoding
70       * is used.
71       *
72       * @param data the byte array to be encoded
73       * @param charset the desired character encoding
74       * @return The result of the conversion.
75       */
76      public static String getString(final byte[] data, final String charset) {
77          Args.notNull(data, "Input");
78          return getString(data, 0, data.length, charset);
79      }
80  
81      /**
82       * Converts the specified string to a byte array.  If the charset is not supported the
83       * default system charset is used.
84       *
85       * @param data the string to be encoded
86       * @param charset the desired character encoding
87       * @return The resulting byte array.
88       */
89      public static byte[] getBytes(final String data, final String charset) {
90          Args.notNull(data, "Input");
91          Args.notEmpty(charset, "Charset");
92          try {
93              return data.getBytes(charset);
94          } catch (final UnsupportedEncodingException e) {
95              return data.getBytes();
96          }
97      }
98  
99      /**
100      * Converts the specified string to byte array of ASCII characters.
101      *
102      * @param data the string to be encoded
103      * @return The string as a byte array.
104      */
105     public static byte[] getAsciiBytes(final String data) {
106         Args.notNull(data, "Input");
107         try {
108             return data.getBytes(Consts.ASCII.name());
109         } catch (final UnsupportedEncodingException e) {
110             throw new Error("ASCII not supported");
111         }
112     }
113 
114     /**
115      * Converts the byte array of ASCII characters to a string. This method is
116      * to be used when decoding content of HTTP elements (such as response
117      * headers)
118      *
119      * @param data the byte array to be encoded
120      * @param offset the index of the first byte to encode
121      * @param length the number of bytes to encode
122      * @return The string representation of the byte array
123      */
124     public static String getAsciiString(final byte[] data, final int offset, final int length) {
125         Args.notNull(data, "Input");
126         try {
127             return new String(data, offset, length, Consts.ASCII.name());
128         } catch (final UnsupportedEncodingException e) {
129             throw new Error("ASCII not supported");
130         }
131     }
132 
133     /**
134      * Converts the byte array of ASCII characters to a string. This method is
135      * to be used when decoding content of HTTP elements (such as response
136      * headers)
137      *
138      * @param data the byte array to be encoded
139      * @return The string representation of the byte array
140      */
141     public static String getAsciiString(final byte[] data) {
142         Args.notNull(data, "Input");
143         return getAsciiString(data, 0, data.length);
144     }
145 
146     /**
147      * This class should not be instantiated.
148      */
149     private EncodingUtils() {
150     }
151 
152 }