View Javadoc

1   package com.ozacc.mail.impl;
2   
3   import java.util.Locale;
4   
5   /***
6    * The Cp932 class contains a utility method for converting Microsoft's
7    * Cp 932 into JIS.
8    *
9    * @author Kazuhiro Kazama
10   * @version 1.0 01/06/97
11   * 
12   * @since 1.0.2
13   */
14  public class Cp932 {
15  
16  	private static boolean isCp932 = false;
17  
18  	static {
19  		String p = System.getProperty("iscp932");
20  		String os = System.getProperty("os.name");
21  		if (Locale.getDefault().getLanguage().equals("ja")) {
22  			if (p != null && Boolean.getBoolean(p))
23  				isCp932 = true;
24  			else if (os != null && (os.startsWith("Win")))
25  				isCp932 = true;
26  		}
27  	}
28  
29  	/*
30  	 * You can't use this constructor.
31  	 */
32  	private Cp932() {}
33  
34  	/*
35  	 * This method converts Cp932 to JIS.
36  	 */
37  	public static String toJIS(String s) {
38  
39  		/* commented by otsuka
40  		 * 
41  		 * if (!isCp932)
42  		 * return s;
43  		 */
44  
45  		StringBuffer sb = new StringBuffer();
46  		char c;
47  		for (int i = 0; i < s.length(); i++) {
48  			c = s.charAt(i);
49  
50  			switch (c) {
51  				case 0xff3c: // FULLWIDTH REVERSE SOLIDUS ->
52  					c = 0x005c; // REVERSE SOLIDUS
53  					break;
54  				case 0xff5e: // FULLWIDTH TILDE ->
55  					c = 0x301c; // WAVE DASH
56  					break;
57  				case 0x2225: // PARALLEL TO ->
58  					c = 0x2016; // DOUBLE VERTICAL LINE
59  					break;
60  				case 0xff0d: // FULLWIDTH HYPHEN-MINUS ->
61  					c = 0x2212; // MINUS SIGN
62  					break;
63  				case 0xffe0: // FULLWIDTH CENT SIGN ->
64  					c = 0x00a2; // CENT SIGN
65  					break;
66  				case 0xffe1: // FULLWIDTH POUND SIGN ->
67  					c = 0x00a3; // POUND SIGN
68  					break;
69  				case 0xffe2: // FULLWIDTH NOT SIGN ->
70  					c = 0x00ac; // NOT SIGN
71  					break;
72  			}
73  			sb.append(c);
74  		}
75  		return new String(sb);
76  	}
77  
78  	/*
79  	 * This method convert JIS to Cp932.
80  	 */
81  	public static String toCp932(String s) {
82  		if (!isCp932)
83  			return s;
84  		StringBuffer sb = new StringBuffer();
85  		char c;
86  		for (int i = 0; i < s.length(); i++) {
87  			c = s.charAt(i);
88  
89  			switch (c) {
90  				case 0x005c: // REVERSE SOLIDUS ->
91  					c = 0xff3c; // FULLWIDTH REVERSE SOLIDUS
92  					break;
93  				case 0x301c: // WAVE DASH ->
94  					c = 0xff5e; // FULLWIDTH TILDE
95  					break;
96  				case 0x2016: // DOUBLE VERTICAL LINE ->
97  					c = 0x2225; // PARALLEL TO
98  					break;
99  				case 0x2212: // MINUS SIGN ->
100 					c = 0xff0d; // FULLWIDTH HYPHEN-MINUS
101 					break;
102 				case 0x00a2: // CENT SIGN ->
103 					c = 0xffe0; // FULLWIDTH CENT SIGN
104 					break;
105 				case 0x00a3: // POUND SIGN ->
106 					c = 0xffe1; // FULLWIDTH POUND SIGN
107 					break;
108 				case 0x00ac: // NOT SIGN ->
109 					c = 0xffe2; // FULLWIDTH NOT SIGN
110 					break;
111 			}
112 			sb.append(c);
113 		}
114 		return new String(sb);
115 	}
116 }