Rust字串字面值的一些經驗總結
2022-04-02 19:00:35
前言
Rust 中有兩種字串,String 和 &str,其中 String 可動態分配、修改,內部實現可以理解為 Vec<u8>,而 &str 是一個型別為 &[u8] 的切片。這兩種字串都只能儲存合法的 UTF-8 字元。
而對於非肉眼可辨識的 UTF-8 字元,則可以考慮使用如下型別:
- 檔案路徑有專用的 Path 和 PathBuf 類可用。
- 使用 Vec<u8> 和 &[u8]
- 使用 OSString 和 &OSStr 和作業系統互動
- 使用 CString 和 &CStr 和 C 庫互動
上面的第二種方法,就是常用的處理非 UTF-8 位元組流的方式,也就是使用 Vec<u8> 和 &[u8] ,其中我們也可以使用字面值來處理這兩種型別的資料,我們稱之為位元組字串字面值(byte string literals),其型別為 &[u8]。
字串字面值(String literals)
先來看一下字串字面值。
和其他語言一樣,用雙引號括起來就是一個字串,不過 Rust 的一個特點是字串可以跨行,即中間有回車也不會引起編譯或執行錯誤,在輸出的時候也會帶著裡面的換行符。
同樣,字串字面值裡面支援跳脫,比如想在裡面使用雙引號,該跳脫也會對換行符進行跳脫,比如下面這樣,在換行符前面使用 ,則該跳脫符、換行符以及下一行開頭的所有空格都將會被忽略:
let a = "foobar"; let b = "foo bar"; assert_eq!(a,b);
字串字面值除了支援常見的 對位元組(字元)進行跳脫,還支援對 Unicode 進行跳脫:
- xHH: + 2位的十六進位制7位寬度位元組碼,這相當於等值的 ASCII 字元。
- u{xxxx}:24位元長的16進位制,表示等值的 Unicode 字元。
- n/r/t 表示 U+000A (LF), U+000D (CR) 和 U+0009 (HT)
- \ 用來對 本身進行跳脫