Java基础随笔 BASE64 UrlEncode

import java.net.URLEncoder;
import java.net.URLDecoder;

public class Test 
{
    public static void main(String[] args) 
    {
        try{

            String s = "我";

            byte[] bu = s.getBytes("UTF-8");
            for(int i=0;i                 System.out.println("bu:["+i+"]=="+bu[i]);

            String sutf8 = new String(bu,"UTF-8");
            System.out.println("bu-utf8-"+ sutf8);
            System.out.println("bu-gbk-"+ new String(bu,"GBK"));


            // 将普通字符创转换成application/x-www-from-urlencoded字符串  
            String sutf8UrlEncode = URLEncoder.encode(sutf8, "UTF-8");  
            System.out.println(sutf8 +" UTF-8: URLEncoder==="+sutf8UrlEncode); //输出 

            // 将application/x-www-from-urlencoded字符串转换成普通字符串  
            String sutf8UrlDecode = URLDecoder.decode(sutf8UrlEncode, "UTF-8");  
            System.out.println(sutf8 +" UTF-8: URLDecoder==="+sutf8UrlDecode); //输出 


            System.out.println("\n\r==========================\n\r");


            byte[] bg = s.getBytes("GBK");
            for(int j=0;j                 System.out.println("bg:["+j+"]=="+bg[j]);

            String sgkb = new String(bg,"GBK");
            System.out.println("bg-utf8-"+ new String(bg,"UTF-8"));
            System.out.println("bg-gbk-"+ sgkb);

            // 将普通字符创转换成application/x-www-from-urlencoded字符串  
            String sgbkUrlEncode = URLEncoder.encode(sgkb, "GBK");  
            System.out.println(sgkb +" GBK: URLEncoder==="+sgbkUrlEncode); //输出 

            // 将application/x-www-from-urlencoded字符串转换成普通字符串  
            String sgbkUrlDecode = URLDecoder.decode(sgbkUrlEncode, "GBK");  
            System.out.println(sgkb +" GBK: URLDecoder==="+sgbkUrlDecode); //输出 


        }catch(Exception e){
        }
    }


/**
-1:1111 1111
-2:1111 1110
-3:1111 1101
-4:1111 1100
-5:1111 1011
-6:1111 1010
-7:1111 1001
-8:1111 1000
-9:1111 0111
-10:1111 0110
-11:1111 0101
-12:1111 0100
-13:1111 0011
-14:1111 0010
-15:1111 0001
-16:1111 0000
-17:1110 1111
-18:1110 1110
-19:1110 1101
-20:1110 1100
-21:1110 1011
-22:1110 1010
-23:1110 1001
-24:1110 1000
-25:1110 0111
-26:1110 0110    十六进制 0xE6 对应到urlencode后的值就是 %E6 (一字节8bit)

所谓的urlencode,不过是简单的将字节流,每个字节都用十六进制表示而已,也就是说:
举例:
汉字:我 用utf-8编码,对应的字节流数组bu是三个字节 
bu:[0]==-26    -26 的十六进制表示 0xE6 ,用urlencode的表现形式是 %E6
bu:[1]==-120  -120 的十六进制表示 0x88 ,用urlencode的表现形式是 %88
bu:[2]==-111  -111 的十六进制表示 0x91 ,用urlencode的表现形式是 %91

0000:0
0001:1
0010:2
0011:3
0100:4
0101:5
0110:6
1110:E
1111:F
*/

/**
HTTP协议规定的URL传输规范:[0-9a-zA-Z] 和 $ - _ . + ! * ' ( ) , 这些字符能用在URL请求中

Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], 
and reserved characters used for their reserved purposes may be used unencoded within a URL

页面中的form表单提交,一般写法是:


这里的application/x-www-form-urlencoded意思就是:提交的表单内容都是需要浏览器urlencoded编码的

urlencoded的目的:提交的内容中有大量不符合URL传输规范范围的字符时,urlencode之后,就都可以传输给后台服务器了
一般的web服务器都是会收到http请求时,发现传输过来的请求内容是application/x-www-form-urlencoded时,Web服务器会对内容自动urldecode解码的
至于服务器,解码时,按照什么字符编码集进行解码,这是事先要配置服务器所使用的字符集。
例如:
(1) tomcat服务器
对于tomcat服务器,该文件是server.xml
                         maxThreads="150" connectionTimeout="20000"   
                     redirectPort="8443" URIEncoding="GBK"/>
 

URIEncoding告诉服务器servlet解码URL时采用的编码。


useBodyEncodingForURI告诉服务器解码URL时候需要采用request body指定的编码。

(2) weblogic服务器
对于weblogic服务器,该文件是weblogic.xml 
     
    GBK  
   

*/

/**

BASE64:[0-9a-zA-Z] 和 + / 这64个可打印字符

最早出现在邮件技术中,解决邮件无法发送附件、汉字、图片等问题的技术

也是一种对字节流处理的手段,
客户端每 3个字节 --> 4个字节 (当字节不够3的倍数时,最后补上=等号来补充)
服务端进行返解析 4个字节 --> 3个字节 得到原始的字节流,然后这个字节流的原始字符集编码是什么,在通过字符集编码new(byte[],charset)就能拿到原始的字符串了。。

说白了,这也是一种http协议下url传输规范里面没有特殊字符,而现实中确实要传输字符(比如:汉字)的解决方案。(一般都用于接口开发中)

*/

}
 

你可能感兴趣的:(Java基础)