微網誌

微網誌

簡單

說明

你發現社群媒體市場在極短貼文這塊有個缺口。 既然 Twitter 現在允許 280 個字元的貼文,那些想要快速更新社群動態的人反而沒被服務到。 你決定打造自己的社群媒體網路。

為了讓你的產品與眾不同,你把它做到極端:只允許 5 個字元以內的貼文。 任何超過 5 個字元的貼文都應該截斷成 5 個字元。

為了讓使用者能充分表達自己,你允許 Emoji 和其他 Unicode 字元。

你的任務是把輸入字串截斷成 5 個字元。

文字編碼

以數位形式儲存的文字必須轉換成一連串的位元組。 目前常見的字元對應到位元組的方式有 3 種。

  • ASCII可以編碼英文的字元。 所有字元都恰好佔 1 位元組。
  • UTF-8是一種 Unicode 文字編碼。 字元佔 1 到 4 位元組。
  • UTF-16是一種 Unicode 文字編碼。 字元長度不是 2 位元組就是 4 位元組。

UTF-8 和 UTF-16 都是 Unicode 編碼,這表示它們能夠表示非常多種字元,包括:

  • 世界上大多數語言與文字系統的文字
  • 歷史文本
  • Emoji

UTF-8 和 UTF-16 都是可變長度編碼,這表示不同的字元佔用的空間大小也不同。

來看看字母「a」和 Emoji「😛」。 在 UTF-16 中,字母佔 2 位元組,但這個 Emoji 佔 4 位元組。

這道練習的訣竅,在於使用以 Unicode 字元(碼點)為核心設計的 API,而不是以 Unicode 碼元為核心的 API。

關於 Unicode 的 Tcl 注意事項

在 8.1 版中,Tcl 字串就能夠流暢地處理 Unicode 字元。 在當時,這可是相當劃時代的創舉。 然而,隨著 Unicode 字元不斷增加,Tcl 處理它們的能力也逐漸落後。

Tcl 的內部實作只能處理 16 位元的 Unicode 字元,僅涵蓋前 65,526 個字元。 這個 Tcl wiki 頁面,特別是其中關於「AndroWish」語言的討論,說明了背後的原因。

Tcl 9.0 是第一個能夠處理完整 Unicode 字元集的版本。 因此,這個練習只有使用 Tcl 9.0 版才能(輕鬆地)完成。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Tcl Exercism

準備好開始 微網誌 了嗎?

註冊 Exercism,透過 135 個練習 和真人引導來學習並精通 Tcl,全部免費。