e600: Unicode (萬國碼)
Tags : 中文
Accepted rate : 8人/9人 ( 89% ) [非即時]
評分方式:
Tolerant

最近更新 : 2019-11-18 06:50

Content

在電腦剛開始發展時,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。

Input

輸入包含多行。

每行一個 Unicode 編碼數字。

輸入一定在上表粗體範圍內。

Output

對於每行輸入,輸出兩行。

第一行為 UTF-8 編碼數字,請用空白分隔。

第二行為其對應的代表字元。

Sample Input
U+55E8
U+4F60
U+597D
Sample Output
11100101 10010111 10101000
嗨
11100100 10111101 10100000
你
11100101 10100101 10111101
好
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (50%): 1.0s , <1K
公開 測資點#1 (50%): 1.0s , <1K
Hint :
Tags:
中文
出處:
트와이스 [管理者:
ig99lp33lp33 (원스)
]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」