Android中常用的编码和解码(加密和解密)的问题
1. URL Encoding
编码目的是为了在⺴址上可以包含中文等特殊字符
解码是为了把编码后的内容还原成原始的内容
格式如下%9C%3C%F3%98 规则: %hex_byte
就是将实际的字节转换为十六进制进行显示
编码URLEncoder.encode(String str, String charset)
解码 URLDecoder.encode(String str, String charset)
eg. %E6%88%91%E6%98%AFvhly%EF%BC%8C%E4%BD%A0%E6%98%AF%E8%B0%81%3F 该字符串代表什么内容?
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 /** 解码演示 */ 7 8 //解码之前的字符串 9 String str1= " %E6%88%91%E6%98%AFvhly%EF%BC%8C%E4%BD%A0%E6%98%AF%E8%B0%81%3F"; 10 //解码之后的字符串 11 try { 12 String str2= URLDecoder.decode(str1,"UTF-8"); 13 Log.v("TAG", "str2="+str2); //str2= 我是vhly,你是谁? 14 15 } catch (UnsupportedEncodingException e) { 16 // TODO Auto-generated catch block 17 e.printStackTrace(); 18 } 19 20 /** 编码演示*/ 21 String str3 = "It's Don!"; 22 try { 23 String str4 = URLEncoder.encode(str3, "UTF-8"); 24 Log.v("TAG", "str4="+str4); //str4=It%27s+Don%21 25 26 } catch (UnsupportedEncodingException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 31 }
2.Base64
包含大小写英文字母,10个数字,以及= + 的编码格式
1.Base64能够把二进制的文件转换为文本文件
2.把整个内容全部转换为可以显⽰的字符串
3.包含编码和解码,主要⽤于客户端与服务器传图⽚
4.编码android.util.Base64.encodeToString(byte[], int)
5.解码android.util.Base64.decode(String, int)
常见的编解码工具
Android 自带 android.util.Base64
Apache Common Codec 类库 Base64
eg. 5L2g5piv6LCBPw== 这个字符串的内容是什么?
1 import java.net.URLDecoder; 2 import java.net.URLEncoder; 3 4 import android.util.Base64; 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 /** 解码演示 */ 11 12 //解码之前的字符串 13 String str1= "5L2g5piv6LCBPw=="; 14 //解码之后的字符串 15 try { 16 byte[] bytes = Base64.decode(str1, Base64.NO_WRAP); 17 String str2= new String(bytes,"UTF-8"); 18 Log.v("TAG", "str2="+str2); //str2=你是谁? 19 20 21 } catch (UnsupportedEncodingException e) { 22 e.printStackTrace(); 23 } 24 25 /** 编码演示*/ 26 String str3 = "I love Android!"; 27 try { 28 String str4 = Base64.encodeToString(str3.getBytes("UTF-8"), Base64.NO_WRAP); 29 Log.v("TAG", "str4="+str4); // str4=SSBsb3ZlIEFuZHJvaWQh 30 31 } catch (UnsupportedEncodingException e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 36 }