1
1
# 编码解码相关
2
2
``` java
3
+ import android.os.Build ;
4
+ import android.text.Html ;
5
+ import android.util.Base64 ;
6
+
3
7
import java.io.UnsupportedEncodingException ;
4
8
import java.net.URLDecoder ;
5
9
import java.net.URLEncoder ;
@@ -19,57 +23,153 @@ public class EncodeUtils {
19
23
}
20
24
21
25
/**
22
- * 以UTF-8编码字符串
23
- * <p >若想自己指定字符集,可以使用encode (String string , String charset)方法</p>
26
+ * URL编码
27
+ * <p >若想自己指定字符集,可以使用{ @link #urlEncode (String input , String charset)} 方法</p>
24
28
*
25
- * @param string 要编码的字符
29
+ * @param input 要编码的字符
26
30
* @return 编码为UTF-8的字符串
27
31
*/
28
- public static String encodeUTF8 (String string ) {
29
- return encode(string , " UTF-8" );
32
+ public static String urlEncode (String input ) {
33
+ return urlEncode(input , " UTF-8" );
30
34
}
31
35
32
36
/**
33
- * 字符编码
34
- * <p >若系统不支持指定的编码字符集,则直接将string原样返回 </p>
37
+ * URL编码
38
+ * <p >若系统不支持指定的编码字符集,则直接将input原样返回 </p>
35
39
*
36
- * @param string 要编码的字符
40
+ * @param input 要编码的字符
37
41
* @param charset 字符集
38
42
* @return 编码为字符集的字符串
39
43
*/
40
- public static String encode (String string , String charset ) {
44
+ public static String urlEncode (String input , String charset ) {
41
45
try {
42
- return URLEncoder . encode(string , charset);
46
+ return URLEncoder . encode(input , charset);
43
47
} catch (UnsupportedEncodingException e) {
44
- return string ;
48
+ return input ;
45
49
}
46
50
}
47
51
48
52
/**
49
- * 以UTF-8解码字符串
50
- * <p >若想自己指定字符集,可以使用# {decode (String string , String charset)}方法</p>
53
+ * URL解码
54
+ * <p >若想自己指定字符集,可以使用 { @link #urlDecode (String input , String charset) }方法</p>
51
55
*
52
- * @param string 要解码的字符
53
- * @return 解码为UTF-8的字符串
56
+ * @param input 要解码的字符串
57
+ * @return URL解码后的字符串
54
58
*/
55
- public static String decodeUTF8 (String string ) {
56
- return decode(string , " UTF-8" );
59
+ public static String urlDecode (String input ) {
60
+ return urlDecode(input , " UTF-8" );
57
61
}
58
62
59
63
/**
60
- * 字符解码
61
- * <p >若系统不支持指定的解码字符集,则直接将string原样返回 </p>
64
+ * URL解码
65
+ * <p >若系统不支持指定的解码字符集,则直接将input原样返回 </p>
62
66
*
63
- * @param string 要解码的字符
67
+ * @param input 要解码的字符串
64
68
* @param charset 字符集
65
- * @return 解码为字符集的字符串
69
+ * @return URL解码为指定字符集的字符串
66
70
*/
67
- public static String decode (String string , String charset ) {
71
+ public static String urlDecode (String input , String charset ) {
68
72
try {
69
- return URLDecoder . decode(string , charset);
73
+ return URLDecoder . decode(input , charset);
70
74
} catch (UnsupportedEncodingException e) {
71
- return string;
75
+ return input;
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Base64编码
81
+ *
82
+ * @param input 要编码的字符串
83
+ * @return Base64编码后的字符串
84
+ */
85
+ public static String base64Encode (String input ) {
86
+ return base64Encode(input. getBytes());
87
+ }
88
+
89
+ /**
90
+ * Base64编码
91
+ *
92
+ * @param input 要编码的字节数组
93
+ * @return Base64编码后的字符串
94
+ */
95
+ public static String base64Encode (byte [] input ) {
96
+ return Base64 . encodeToString(input, Base64 . DEFAULT );
97
+ }
98
+
99
+ /**
100
+ * Base64解码
101
+ *
102
+ * @param input 要解码的字符串
103
+ * @return Base64解码后的字符串
104
+ */
105
+ public static String base64Decode (String input ) {
106
+ return new String (Base64 . decode(input, Base64 . DEFAULT ));
107
+ }
108
+
109
+ /**
110
+ * Base64URL安全编码
111
+ * <p >将Base64中的URL非法字符�?,/=转为其他字符, 见RFC3548</p>
112
+ *
113
+ * @param input 要Base64URL安全编码的字符串
114
+ * @return Base64URL安全编码后的字符串
115
+ */
116
+ public static String base64UrlSafeEncode (String input ) {
117
+ return Base64 . encodeToString(input. getBytes(), Base64 . URL_SAFE );
118
+ }
119
+
120
+ /**
121
+ * Html编码
122
+ *
123
+ * @param input 要Html编码的字符串
124
+ * @return Html编码后的字符串
125
+ */
126
+ public static String htmlEncode (String input ) {
127
+ if (Build . VERSION. SDK_INT >= Build . VERSION_CODES. JELLY_BEAN ) {
128
+ return Html . escapeHtml(input);
129
+ } else {
130
+ // 参照Html.escapeHtml()中代码
131
+ StringBuilder out = new StringBuilder ();
132
+ for (int i = 0 , len = input. length(); i < len; i++ ) {
133
+ char c = input. charAt(i);
134
+ if (c == ' <' ) {
135
+ out. append(" <" );
136
+ } else if (c == ' >' ) {
137
+ out. append(" >" );
138
+ } else if (c == ' &' ) {
139
+ out. append(" &" );
140
+ } else if (c >= 0xD800 && c <= 0xDFFF ) {
141
+ if (c < 0xDC00 && i + 1 < len) {
142
+ char d = input. charAt(i + 1 );
143
+ if (d >= 0xDC00 && d <= 0xDFFF ) {
144
+ i++ ;
145
+ int codepoint = 0x010000 | (int ) c - 0xD800 << 10 | (int ) d - 0xDC00 ;
146
+ out. append(" &#" ). append(codepoint). append(" ;" );
147
+ }
148
+ }
149
+ } else if (c > 0x7E || c < ' ' ) {
150
+ out. append(" &#" ). append((int ) c). append(" ;" );
151
+ } else if (c == ' ' ) {
152
+ while (i + 1 < len && input. charAt(i + 1 ) == ' ' ) {
153
+ out. append(" " );
154
+ i++ ;
155
+ }
156
+ out. append(' ' );
157
+ } else {
158
+ out. append(c);
159
+ }
160
+ }
161
+ return out. toString();
72
162
}
73
163
}
164
+
165
+ /**
166
+ * Html解码
167
+ *
168
+ * @param input 待解码的字符串
169
+ * @return Html解码后的字符串
170
+ */
171
+ public static String htmlDecode (String input ) {
172
+ return Html . fromHtml(input). toString();
173
+ }
74
174
}
75
175
```
0 commit comments