在電腦剛開始發展時,ASCII 編碼僅用了 7 bits 表示 128 (2^7) 種文字。
換句話說,ASCII 編碼基本上只能表達英文字母 A-Z、a-z、數字 0-9 以及一些標點符號。
雖然不夠完善,但是對於英語系國家來說 ASCII 編碼已經十分夠用了。
直到電腦普及到世界各地,Unicode 誕生了!!!他記錄了全世界所有的文字與符號。
Unicode 又稱為"Universal Multiple-Octet Coded Character Set"。
在 Unicode 中,他讓各語言的文字符號都能用一個數字代表它,而且這個數字是世界通用且不會重複的,有點像是一個巨大的hash table。
Unicode 通常使用[U+]加一組十六進位的數字來表示文字,例如:U+55E8。
但是 Unicode 只解決了編碼統一的問題,並沒有解決儲存和解析的問題。
如果統一用一固定長度的編碼來表達全世界的文字,勢必得用多個位元組來表達一個字元,這將會浪費儲存空間與傳輸頻寬。
對於英語系國家而言,使用 ASCII 編碼就夠用了,根本沒必要用 Unicode。
因此 UTF-8 (8-bit Unicode Transformation Format) 完美的解決這個問題,UTF-8 是個可變長度的編碼,它使用 1 ~ 4 bytes 來表達一個字元。
並向下相容 ASCII,UTF-8 的前 128 個字元編碼與 ASCII 編碼完全相同,如此一來處理英文字元時就不會有上述提到浪費空間的問題。
UTF-8 編碼方式如下表:
Unicode符號範圍 | UTF-8編碼 |
十六進制 | 二進制 |
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 |
中文字的 Unicode 符號範圍均落在上表粗體部分
將中文字的 Unicode 編碼轉成二進位後按順序填入上表 x 的部分,就成為 UTF-8 編碼。
例如:0x55E8 轉成二進位變成 0101 0101 1110 1000 按順序填入上表粗體 x 部分變成 11100101 10010111 10101000。
所以中文字存儲在字串中,才會包含3個位元,而且三個位元皆為負數,將此三個位元輸出就能得到中文字。
例如:將 11100101 10010111 10101000 以二補數法轉成十進位,再將此十進位數字以字元的方式輸出,就能得到中文字。
順帶一提:常見網址上中文變成[%]加一組十六進位數字,也是因為使用 UTF-8 編碼。
例如:上述的 11100101 10010111 10101000 轉成16進位變成 E5 97 A8,而網址就會呈現%E5%97%A8。
輸入包含多行。
每行一個 Unicode 編碼數字。
輸入一定在上表粗體範圍內。
對於每行輸入,輸出兩行。
第一行為 UTF-8 編碼數字,請用空白分隔。
第二行為其對應的代表字元。
U+55E8 U+4F60 U+597D
11100101 10010111 10101000 嗨 11100100 10111101 10100000 你 11100101 10100101 10111101 好
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
31997 | 406490150@gm ... (我是朱朱) | e600 | 278 | 2022-09-05 11:56 |