Android,使用Json發送資料中,使用的Java逸出字元 KanKan原創

來源:互聯網
上載者:User

標籤:

kankan原創

與php後台發送資料的時候。要求用到這樣的格式。


private void sendJson(){

                //初始化自己定義的handler

CashHandler handler = new CashHandler(this);

                //請求主地址。寫在自己定義Application中了,後面是介面名字
String url = MApplication.get().getAppServiceUrl() + "order/submit";

                //自己定義的發送要求方法
LReqEntity entity = new LReqEntity();
entity.setUrl(url);
                 //Lreqentity中,post方法。傳參數的格式是Map(String,String)

        Map<String, String> map = new HashMap<String, String>();

                 //拼接字串

StringBuffer params = new StringBuffer();
// 從積分商城的提交 JUMPKEY是7,則是從積分商城購買

if (JUMPKEY.equals("7")) {

                 //dbmanager是自己定義資料庫查詢方法。查詢的是購物車終於購買的訂單

List<CarteEntity> cartList = DBManager.get().queryFinalCarte(

userEntity.id);

                 //拼接字串

params.append("[");
for (int i = 0; i < cartList.size(); i++) {
CarteEntity scoreEntity = new CarteEntity();

scoreEntity = cartList.get(i);

                     //下一行就是逸出字元。為了發送時候,拼接出來“這個字元,用了逸出字元  \"

                      //這樣發送效果就是       {"A":54}

params.append("{\"A\":");
params.append(scoreEntity.id + "");
params.append(",");
params.append("\"B\":");
params.append(scoreEntity.buyCount);
params.append(",");
params.append("\"C\":");
params.append("\"score\"}");
if (i < cartList.size() - 1) {
params.append(",");
}
}


params.append("]");

        entity.setParams(map);
entity.setReqMode(ReqMothed.POST);


handler.startLoadingData(entity);


}


這樣,達到了拼接要求的效果。http://192.168.100.180:85/service/order/submit?{A=[{"A":95,"B":3,"C":"score"},{"A":99,"B":3,"C":"score"}], B=89}


有關逸出字元,內容非常多。


 JAVA中逸出字元:

最多的就是第一條了

1.特殊字元:就3個 
\":雙引號 
\‘:單引號 
\\:反斜線 




2.八進位逸出序列:\ + 1到3位5數字。範圍‘\000‘~‘\377‘ 
\0:Null 字元 
3.Unicode逸出字元:\u + 四個十六進位數字;0~65535 
\u0000:Null 字元 

4.控制字元:5個

\‘ 單引號字元

\\ 反斜線字元

\r 斷行符號

\n 換行

\f 走紙換頁

\t 橫向跳格

\b 退格

點的轉義:. ==> u002E 
貨幣符號的轉義:$ ==> u0024 
乘方符號的轉義:^ ==> u005E 
左大括弧的轉義:{ ==> u007B 
左方括弧的轉義:[ ==> u005B 
左圓括弧的轉義:( ==> u0028 
豎線的轉義:| ==> u007C 
右圓括弧的轉義:) ==> u0029 
星號的轉義:* ==> u002A 
加號的轉義:+ ==> u002B 
問號的轉義:? ==> u003F 
反斜線的轉義: ==> u005C 
====================================================================== 
以下的程式使用了兩個Unicode的逸出字元,它們是用其十六進位代碼來表示Unicode字元。

那麼,這個程式會列印什麼呢?
Java代碼 
public class EscapeRout{   
public static void main(String[] args){   
// \u0022 是雙引號的Unicode逸出字元   
System.out.println("a\u0022.length()   
+\u0022b".length());   
}   

public class EscapeRout{ 
public static void main(String[] args){ 
// \u0022 是雙引號的Unicode逸出字元 
System.out.println("a\u0022.length() 
+\u0022b".length()); 

}


對該程式的一種非常膚淺的分析會覺得它應該列印出26,由於在由兩個雙引號"a\u0022.length()+\u0022b"標識的字串之間總共同擁有26個字元。 
略微深入一點的分析會覺得該程式應該列印16,由於兩個Unicode逸出字元每個在源檔案裡都須要用6個字元來表示。可是它們僅僅表示字串中 的一個字元。因此這個字串應該比它的外表看其來要短10個字元。 假設你執行這個程式,就會發現事情遠不是這麼回事。

它列印的既不是26也不是16。而是2。

理解這個謎題的關鍵是要知道:Java對在字串字面常量中的Unicode逸出字元沒有提供不論什麼特殊處理。編譯器在將程式解析成各種符號之前, 先將Unicode逸出字元轉換成為它們所表示的字元[JLS 3.2]。因此,程式中的第一個Unicode逸出字元將作為一個單字元字串字面常量("a")的結束引號。而第二個Unicode逸出字元將作為還有一 個單字元字串字面常量("b")的開始引號。

程式列印的是運算式"a".length()+"b".length(),即2。

假設該程式的作者確實希望得到這樣的行為,那麼以下的語句將要清楚得多:


Java代碼 
System.out.println("a".length()+"b".length()); 

更有可能的情況是該作者希望將兩個雙引號字元置於字串字面常量的內部。

使用Unicode逸出字元你是不能實現這一點的,可是你能夠使用轉義字 符序列來實現[JLS 3.10.6]。表示一個雙引號的逸出字元序列是一個反斜線後面緊跟著一個雙引號(\”)。假設將最初的程式中的Unicode逸出字元用逸出字元序列來 替換,那麼它將列印出所期望的16(錯誤,應該是14。不知道是怎麼會出來16):

Java代碼 
System.out.println("a\".length()+\"b".length());

很多字元都有對應的逸出字元序列,包含單引號(\‘)、換行(\n)、定位字元(\t)和反斜線(\\)。你能夠在字元字面常量和字串字面常量中使用逸出字元序列。

 
實際上。你能夠通過使用被稱為八進位逸出字元的特殊類型的逸出字元序列,將不論什麼ASCII字元置於一個字串字面常量或一個字元字面常量中,可是最好是儘可能地使用普通的逸出字元序列。

普通的逸出字元序列和八進位逸出字元都比Unicode逸出字元要好得多,由於與Unicode逸出字元不同,逸出字元序列是在程式被解析為各種符號之後被處理的。

ASCII是字元集的最小公用特性集。它僅僅有128個字元,可是Unicode有超過65,000個字元。一個Unicode逸出字元能夠被用來在僅僅使用ASCII字元的程式中插入一個Unicode字元。一個Unicode逸出字元精確地等價於它所表示的字元。

Unicode逸出字元被設計為用於在程式猿須要插入一個不能用源檔案字元集表示的字元的情況。它們主要用於將非ASCII字元置於標識符、字元 串字面常量、字元字面常量以及凝視中。

偶爾地,Unicode逸出字元也被用來在看起來頗為相似的數個字元中明白地標識當中的某一個。從而添加程式的清晰 度。

總之,在字串和字元字面常量中要優先選擇的是逸出字元序列。而不是Unicode逸出字元。Unicode逸出字元可能會由於它們在編譯序列中 被處理得過早而引起混亂。不要使用Unicode逸出字元來表示ASCII字元。

在字串和字元字面常量中。應該使用逸出字元序列;對於除這些字面常量之 外的情況,應該直接將ASCII字元插入到源檔案裡。

 

 

 


逸出序列 含義 
\n 斷行符號(\u000a) 
\t 水平定位字元(\u0009) 
\b 空格(\u0008) 
\r 換行(\u000d) 
\f 換頁(\u000c) 
\‘ 單引號(\u0027) 
\" 雙引號(\u0022) 
\\ 反斜線(\u005c) 
\ddd 三位八進位 
\udddd 四位十六進位 
JAVA中逸出字元: 
1.八進位逸出序列:
\ + 1到3位5數字;範圍‘\000‘~‘\377‘ 
\0:Null 字元 
2.Unicode逸出字元:
\u + 四個十六進位數字;0~65535 
\u0000:Null 字元 
八進位的是1到3個數字並且注意數值範圍,假設超了範圍也會編譯錯誤的,而十六進位的轉義必須是4個十六進位數字。並且有一些無法轉義,如‘\u000a‘。無法轉移,會出現編譯錯誤,並且相當多的數字沒有相應的字元,僅僅會轉義成問號 而對於數位轉義,僅僅要不超過範圍既能夠了。

 
3.特殊字元:就3個 \":雙引號 \‘:單引號 \\:反斜線 
4.控制字元:5個 \‘ 單引號字元 \\ 反斜線字元 \r 斷行符號 \n 換行 \f 走紙換頁 \t 橫向跳格 \b 退格 
點的轉義:. ==> u002E 
貨幣符號的轉義:$ ==> u0024 
乘方符號的轉義:^ ==> u005E 
左大括弧的轉義:{ ==> u007B 
左方括弧的轉義:[ ==> u005B 
左圓括弧的轉義:( ==> u0028 
豎線的轉義:| ==> u007C 
右圓括弧的轉義:) ==> u0029 
星號的轉義:* ==> u002A 
加號的轉義:+ ==> u002B 
問號的轉義:? ==> u003F 
反斜線的轉義: ==> u005C


Android,使用Json發送資料中,使用的Java逸出字元 KanKan原創

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.