反斜槓加3個數字是什麼編碼, JAVA轉義序列, 轉義字元彙總
阿新 • • 發佈:2019-01-06
例如:\345\244\247\345\256\266\345\245\275\343\200\202 對應漢字是“大家好。"
8進製表示法.將以上每組按8進位制轉換成16進位制是 E5 A4 A7 E5 AE B6 E5 A5 BD
漢字的UTF-8碼, 以上三個字每字三位元組. 如果用JS的話,可以用encodeURI方法進接對漢字進行編碼,得到 %E5%A4%A7%E5%AE%B6%E5%A5%BD 然後將每組16進位制轉換為8進位制,將%替換為\就行了.
//將“大家好。” 轉成反斜槓加三數字(八進位制轉義序列)的java程式碼如下:
public static void main(String[] args) throws Exception { String str = URLEncoder.encode("大家好。", "UTF-8"); String[] s = str.substring(1).split("%"); StringBuffer s8 = new StringBuffer(); for(int i=0;i<s.length;i++){ s8.append("\\"+Integer.toOctalString(Integer.valueOf(s[i],16))); } System.out.println(s8.toString()); }
JAVA中轉義字元: 1.八進位制轉義序列:\ + 1到3位5數字;範圍'\000'~'\377' \0:空字元 2.Unicode轉義字元:\u + 四個十六進位制數字;0~65535 \u0000:空字元 3.特殊字元:就3個 \":雙引號 \':單引號 \\:反斜線 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字元插入到原始檔中。