国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Rust : utf8與unicode碼

一、理論說明
UTF-8

UTF-8 是一個(gè)非常驚艷的編碼方式,漂亮的實(shí)現(xiàn)了對(duì) ASCII 碼的向后兼容,以保證 Unicode 可以被大眾接受。

UTF-8 是目前互聯(lián)網(wǎng)上使用最廣泛的一種 Unicode 編碼方式,它的最大特點(diǎn)就是可變長(zhǎng)。它可以使用 1 - 4 個(gè)字節(jié)表示一個(gè)字符,根據(jù)字符的不同變換長(zhǎng)度。編碼規(guī)則如下:

對(duì)于單個(gè)字節(jié)的字符,第一位設(shè)為 0,后面的 7 位對(duì)應(yīng)這個(gè)字符的 Unicode 碼點(diǎn)。因此,對(duì)于英文中的 0 - 127 號(hào)字符,與 ASCII 碼完全相同。這意味著 ASCII 碼那個(gè)年代的文檔用 UTF-8 編碼打開完全沒有問題。

對(duì)于需要使用 N 個(gè)字節(jié)來表示的字符(N > 1),第一個(gè)字節(jié)的前 N 位都設(shè)為 1,第 N + 1 位設(shè)為0,剩余的 N - 1 個(gè)字節(jié)的前兩位都設(shè)位 10,剩下的二進(jìn)制位則使用這個(gè)字符的 Unicode 碼點(diǎn)來填充。

編碼規(guī)則如下:
Unicode 十六進(jìn)制碼點(diǎn)范圍 UTF-8 二進(jìn)制
0000 0000 - 0000 007F 0xxxxxxx
0000 0080 - 0000 07FF 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx




根據(jù)上面編碼規(guī)則對(duì)照表,進(jìn)行 UTF-8 編碼和解碼就簡(jiǎn)單多了。下面以漢字“漢”為利,具體說明如何進(jìn)行 UTF-8 編碼和解碼。

“漢”的 Unicode 碼點(diǎn)是 0x6c49(110 1100 0100 1001),通過上面的對(duì)照表可以發(fā)現(xiàn),0x0000 6c49 位于第三行的范圍,那么得出其格式為 1110xxxx 10xxxxxx 10xxxxxx。接著,從“漢”的二進(jìn)制數(shù)最后一位開始,從后向前依次填充對(duì)應(yīng)格式中的 x,多出的 x 用 0 補(bǔ)上。這樣,就得到了“漢”的 UTF-8 編碼為 11100110 10110001 10001001,轉(zhuǎn)換成十六進(jìn)制就是 0xE6 0xB7 0x89。

解碼的過程也十分簡(jiǎn)單:如果一個(gè)字節(jié)的第一位是 0 ,則說明這個(gè)字節(jié)對(duì)應(yīng)一個(gè)字符;如果一個(gè)字節(jié)的第一位1,那么連續(xù)有多少個(gè) 1,就表示該字符占用多少個(gè)字節(jié)。

二、代碼

    println!("unicode碼:");
    let ch ='漢' as i32;// unicode 碼
    let ch_unicode = format!("{:X}",ch);
    println!("ch:{:?}",ch_unicode);
    println!("字節(jié)碼和二進(jìn)制代碼:");
    let my_char = "漢".as_bytes();
    let len = my_char.len();
    for i in 0..len{
        println!("bytes[{:?}]:?],{:?}",i,&my_char[i]);
        let bit_char= format!("{:b}",my_char[i]);
        println!("i :{:?} ,bit_char :{:?}",i,bit_char);

    }

output:

unicode碼:
ch:"6C49"
字節(jié)碼和二進(jìn)制代碼:
bytes[0]:?],230
i :0 ,bit_char :"11100110"
bytes[1]:?],177
i :1 ,bit_char :"10110001"
bytes[2]:?],137
i :2 ,bit_char :"10001001"
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASCII、ANSI、UNICODE及UTF-8編碼
GBK與UTF-8互轉(zhuǎn)亂碼詳解
VC知識(shí)庫(kù)文章 - 常用編碼詳解
BIG5編碼, GB編碼(GB2312, GBK, ...), Unicode編碼, UTF8, WideChar, MultiByte, Char 說明與區(qū)別
JAVA中的字符-代碼點(diǎn)-代碼單元三(JAVA新版多語(yǔ)言支持的實(shí)現(xiàn))
一次性搞清楚unicode、codepoint、代碼點(diǎn)、UTF
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服