01: /**
02: * @(#)TranscodeUtil.java 1.0 2001/09/25
03: *
04: * Copyleft 2001 by Steve Excellent Lee,
05: */package org.bulbul.webmail.util;
06:
07: import java.io.UnsupportedEncodingException;
08: import java.util.Locale;
09: import javax.mail.internet.MimeUtility;
10:
11: /**
12: * TranscodeUtil.
13: *
14: * Provides transcoding utilities.
15: *
16: * @author Steve Excellent Lee.
17: * @version 1.0 2000
18: */
19: public class TranscodeUtil {
20: /**
21: * Why we need
22: * org.bulbul.util.TranscodeUtil.transcodeThenEncodeByLocale()?
23: *
24: * Because we specify client browser's encoding to UTF-8, IE seems
25: * to send all data encoded in UTF-8. That means the byte sequences
26: * we received are all UTF-8 bytes. However, strings read from HTTP
27: * is ISO8859_1 encoded, that's we need to transcode them (usually
28: * from ISO8859_1 to UTF-8.
29: * Next we encode those strings using MimeUtility.encodeText() depending
30: * on user's locale. Since MimeUtility.encodeText() is used to convert
31: * the strings into its transmission format, finally we can use the
32: * strings in the outgoing e-mail, then receiver's email agent is
33: * responsible for decoding the strings.
34: *
35: * As described in JavaMail document, MimeUtility.encodeText() conforms
36: * to RFC2047 and as a result, we'll get strings like "=?Big5?B......".
37: * @param sourceString String to be encoded
38: * @param sourceStringEncoding The encoding to decode `sourceString'
39: * string. If `sourceStringEncoding'
40: * is null, use JVM's default enconding.
41: * @param Locale prefered locale
42: *
43: * @return empty string(prevent NullPointerException) if sourceString
44: * is null or empty("");
45: * otherwise RFC2047 conformed string, eg, "=?Iso8859-1?Q....."
46: */
47: public static String transcodeThenEncodeByLocale(
48: String sourceString, String sourceStringEncoding,
49: Locale locale) throws java.io.UnsupportedEncodingException {
50: String str;
51:
52: if ((sourceString == null) || (sourceString.equals("")))
53: return "";
54:
55: // Transcode to UTF-8
56: if ((sourceStringEncoding == null)
57: || (sourceStringEncoding.equals("")))
58: str = new String(sourceString.getBytes(), "UTF-8");
59: else
60: str = new String(sourceString
61: .getBytes(sourceStringEncoding), "UTF-8");
62:
63: // Encode text
64: if (locale.getLanguage().equals("zh")
65: && locale.getCountry().equals("TW")) {
66: return MimeUtility.encodeText(str, "Big5", null);
67: } else {
68: return MimeUtility.encodeText(str);
69: }
70: }
71: }
|