001/**************************************************************** 002 * Licensed to the Apache Software Foundation (ASF) under one * 003 * or more contributor license agreements. See the NOTICE file * 004 * distributed with this work for additional information * 005 * regarding copyright ownership. The ASF licenses this file * 006 * to you under the Apache License, Version 2.0 (the * 007 * "License"); you may not use this file except in compliance * 008 * with the License. You may obtain a copy of the License at * 009 * * 010 * http://www.apache.org/licenses/LICENSE-2.0 * 011 * * 012 * Unless required by applicable law or agreed to in writing, * 013 * software distributed under the License is distributed on an * 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 015 * KIND, either express or implied. See the License for the * 016 * specific language governing permissions and limitations * 017 * under the License. * 018 ****************************************************************/ 019 020package org.apache.james.mime4j.util; 021 022import java.nio.charset.Charset; 023import java.nio.charset.IllegalCharsetNameException; 024import java.nio.charset.UnsupportedCharsetException; 025 026/** 027 * Utility class for working with character sets. 028 */ 029public class CharsetUtil { 030 031 /** carriage return - line feed sequence */ 032 public static final String CRLF = "\r\n"; 033 034 /** US-ASCII CR, carriage return (13) */ 035 public static final int CR = '\r'; 036 037 /** US-ASCII LF, line feed (10) */ 038 public static final int LF = '\n'; 039 040 /** US-ASCII SP, space (32) */ 041 public static final int SP = ' '; 042 043 /** US-ASCII HT, horizontal-tab (9) */ 044 public static final int HT = '\t'; 045 046 public static final Charset US_ASCII = Charset.forName("US-ASCII"); 047 048 public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); 049 050 public static final Charset UTF_8 = Charset.forName("UTF-8"); 051 052 public static final Charset DEFAULT_CHARSET = US_ASCII; 053 054 /** 055 * Returns <code>true</code> if the specified character falls into the US 056 * ASCII character set (Unicode range 0000 to 007f). 057 * 058 * @param ch 059 * character to test. 060 * @return <code>true</code> if the specified character falls into the US 061 * ASCII character set, <code>false</code> otherwise. 062 */ 063 public static boolean isASCII(char ch) { 064 return (0xFF80 & ch) == 0; 065 } 066 067 /** 068 * Returns <code>true</code> if the specified string consists entirely of 069 * US ASCII characters. 070 * 071 * @param s 072 * string to test. 073 * @return <code>true</code> if the specified string consists entirely of 074 * US ASCII characters, <code>false</code> otherwise. 075 */ 076 public static boolean isASCII(final String s) { 077 if (s == null) { 078 throw new IllegalArgumentException("String may not be null"); 079 } 080 final int len = s.length(); 081 for (int i = 0; i < len; i++) { 082 if (!isASCII(s.charAt(i))) { 083 return false; 084 } 085 } 086 return true; 087 } 088 089 /** 090 * Returns <code>true</code> if the specified character is a whitespace 091 * character (CR, LF, SP or HT). 092 * 093 * @param ch 094 * character to test. 095 * @return <code>true</code> if the specified character is a whitespace 096 * character, <code>false</code> otherwise. 097 */ 098 public static boolean isWhitespace(char ch) { 099 return ch == SP || ch == HT || ch == CR || ch == LF; 100 } 101 102 /** 103 * Returns <code>true</code> if the specified string consists entirely of 104 * whitespace characters. 105 * 106 * @param s 107 * string to test. 108 * @return <code>true</code> if the specified string consists entirely of 109 * whitespace characters, <code>false</code> otherwise. 110 */ 111 public static boolean isWhitespace(final String s) { 112 if (s == null) { 113 throw new IllegalArgumentException("String may not be null"); 114 } 115 final int len = s.length(); 116 for (int i = 0; i < len; i++) { 117 if (!isWhitespace(s.charAt(i))) { 118 return false; 119 } 120 } 121 return true; 122 } 123 124 /** 125 * Returns a {@link Charset} instance if character set with the given name 126 * is recognized and supported by Java runtime. Returns <code>null</code> 127 * otherwise. 128 * <p/> 129 * This method is a wrapper around {@link Charset#forName(String)} method 130 * that catches {@link IllegalCharsetNameException} and 131 * {@link UnsupportedCharsetException} and returns <code>null</code>. 132 */ 133 public static Charset lookup(final String name) { 134 if (name == null) { 135 return null; 136 } 137 try { 138 return Charset.forName(name); 139 } catch (IllegalCharsetNameException ex) { 140 return null; 141 } catch (UnsupportedCharsetException ex) { 142 return null; 143 } 144 } 145 146 }