日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 中的编码与解码

發布時間:2024/9/30 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 中的编码与解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:今天遇到一個問題,一個用戶在登錄的時候,出現登錄失敗。但是其他用戶登錄都是正常的,經過調試發現登錄失敗的用戶的密碼中有兩個特殊字符: * 、#? 。

??????? 特殊符號在提交表單的時候,出現了編碼不一樣的問題。那么編碼是什么鬼??

?

1、什么是application/x-www-form-urlencoded字符串?

??? 它是一種編碼類型。

????當URL地址里包含非西歐字符的字符串時,系統會將這些字符轉換成application/x-www-form-urlencoded字符串。

? ? 表單提交時也是如此,當包含非西歐字符的字符串時,系統也會將這些字符轉換成application/x-www-form-urlencoded字符串。

???

package com.app; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;public class AA {public static void main(String[] args) {/*** 將application/x-www-form-urlencoded字符串 轉換成普通字符串*/String keyWord = "";try {keyWord = URLDecoder.decode("%E6%96%87%E6%A1%A3", "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println(keyWord);/*** 將普通字符串轉換成application/x-www-form-urlencoded字符串* 必須強調的是編碼方式必須正確,如baidu的是gb2312,而google的是UTF-8*/String urlStr = "" ;try {urlStr = URLEncoder.encode("文檔", "Utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println(urlStr);} }

?

運行結果是:

? 文檔
?%E6%96%87%E6%A1%A3

?

2、URLEncoder? 和? URLDecoder

??? 在java1.3和早期版本中,返回一個新的被編碼后的string,encode( ) 使用了平臺的默認編碼形式

?? 編碼: ??public static String encode(String s)

?? 解碼:?? public static String?decode(String s)??

?? 在java1.4中及以后,要求用戶自己指定編碼形式,比如 "UTF-8" 、?"gb2312" 。

?? 編碼: public static String encode(String s, String encoding) throws UnsupportedEncodingException

?? 解碼: public static String decode(String s, String encoding) throws UnsupportedEncodingException

?

?? 注意:如果你拿不定主意用哪種編碼方式,那就選擇UTF-8吧。它比其他任何的編碼形式更有可能得到正確的結果。

?

3、為什么要編碼?

??? 答案:處理不同操作系統間的差異性

? web設計者面臨的眾多難題之一便是怎樣處理不同操作系統間的差異性。這些差異性能引起URL方面的問題:例如,一些操作系統允許文件名中含有空格符,有些又不允許。

? 大多數操作系統不會認為文件名中含有符號“#”會有什么特殊含義;但是在一個URL中,符號“#”表示該文件名已經結束,后面會緊跟一個fragment(部分)標識符。其他的特殊字符,? 非字母數字字符集,它們在URL或另一個操作系統上都有其特殊的含義,表述著相似的問題。為了解決這些問題

我們在URL中使用的字符就必須是一個ASCII字符集的固定字集中的元素,具體如下:

?? 1.大寫字母A-Z
?? 2.小寫字母a-z
?? 3.數字 0-9
?? 4.標點符 - _ . ! ~ * ' (和 ,)

? 如果向服務器提交數據中含有? / & ? @ # ; $ + = %,這些字符和所有其他字符就應該被編碼。

? 編碼過程非常簡單,任何字符只要不是ASCII碼數字,字母,或者前面提到的標點符,它們都將被轉換成字節形式,每個字節都寫成這種形式:一個“%”后面跟著兩位16進制的數值。

? 空格是一個特殊情況,因為它們太平常了。它除了被編碼成“%20”以外,還能編碼為一個“+”。加號(+)本身被編碼為%2B。

? 當/ # = & 和?作為名字的一部分來使用時,而不是作為URL部分之間的分隔符來使用時,它們都應該被編碼。

?

4、如何編碼?

? ?類URL并不自動執行編碼或解碼工作。幸運的是,java提供了一個類URLEncoder把string編碼成這種形式。

?? Java1.2增加了一個類URLDecoder它能以這種形式解碼string。

?

5、網頁中的表單使用POST方法提交時,數據內容的類型是 application/x-www-form-urlencoded,這種類型會:

??? 1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不會被編碼;
??? 2.將空格轉換為加號 (+) ;
??? 3.將非文本內容轉換成"%xy"的形式,xy是兩位16進制的數值;
??? 4.在每個 name=value 對之間放置 & 符號

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Android 中的编码与解码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。