從文字中移除表情符號,指的是刪除完整的 Unicode 字素叢集——也就是連在一起的家族符號序列、膚色修飾符序列、國旗配對組合以及按鍵組合——而不是只剝除孤立的碼點,因為那樣會留下破損的修飾符與隱形的連接字元。大多數搜尋「表情符號貼圖」的人,想要的是把從聊天室、工單系統、社群貼文或文件中複製的一大段文字清理乾淨的方法,而不是把黏貼式的貼紙從筆電上撕下來的方式。與文字一起傳遞的純文字表情符號,採用的是手機鍵盤也使用的同一套 Unicode 規則,而單一一個可見的「貼圖」實際上可能默默是由好幾個碼點透過零寬連接字元黏合而成。以字素層級進行處理,正是讓結果乾淨與充滿隱形殘留之間的差別所在。

how to remove emoji stickers
how to remove emoji stickers

文字中的表情符號貼圖實際上是怎麼運作的

這個差別很重要,因為只看準單一碼點進行天真的搜尋取代,雖然會刪掉可見的人物字符,卻會把膚色修飾符與零寬連接字元留在句子中間漂著。文字看起來「幾乎乾淨」,但其實並不乾淨,下游的解析器經常會因此卡住。一個會把文字切割成使用者感知字素叢集的表情符號清理工具,會把整個表情符號視為一個單位,以原子化的方式移除,這也是本文後續內容所仰賴的基礎。

Unicode 為每個表情符號都指定了名稱與碼點序列,但它刻意允許序列彼此組合。從電腦的角度來看,你能看見並點擊的單一表情符號,其實是一小串相關的字元。鍵盤把這個字串交給文字欄位,而你其他工具如果想要正確移除或顯示表情符號,就必須理解這個字串。

為什麼一次只刪一個字元的表情符號處理方式會出問題

像 🇯🇵 這樣的國旗,是由兩個區域指示符號組成的一個叢集。像 👩🏽‍🔧 這樣的職業表情符號,則結合了人物、膚色修飾符、零寬連接字元以及一個扳手。像 👨‍👩‍👧‍👦 這樣的家庭符號,透過三個零寬連接字元把四個人物連在一起。像 3️⃣ 這樣的按鍵組合,則結合了一個數字、可選的變體選擇符以及一個外框按鍵組合標記。只計算碼點會低估可見的表情符號數量,同時高估你想真正刪除的位元組數。

這就是為什麼用「所有表情符號碼點」這種正規表示式迴圈處理的工具,往往會留下殘留。它們只刪掉序列的開頭就交差了事,結果膚色修飾符或連接字元就變成夾在兩個字母之間的游離隱形字元。瀏覽器內建的Intl.Segmenter(設定為字素顆粒度),搭配涵蓋延伸繪文字、區域指示符號以及按鍵組合標記的 Unicode 屬性逃逸,就能讓清理工具有辦法辨識整個單位,並乾淨地移除它。

這種瀏覽器端的切割機制,也是結果具確定性、不憑猜測的原因。清理工具並未內建一份手動維護的所有表情符號清單;它向瀏覽器詢問叢集邊界,並對每個叢集套用標準化的規則。隨著瀏覽器納入較新的 Unicode 資料,同一個工具就能辨識更多最新的表情符號,而不需要我們這端另行更新。

三個步驟移除文字中的表情符號貼圖

  1. 開啟表情符號移除工具,貼上或輸入你想移除表情符號的文字。文字區最多可接受 1,000,000 個字元,而且絕不會上傳你輸入的內容。
  2. 點擊「移除表情符號」並檢視已移除的數量。回報的數字是完整表情符號字素叢集的數量,而非碼點或位元組,因此一個連在一起的家庭符號算一個,兩個相鄰且帶有膚色修飾符的讚表情符號則算兩個。
  3. 檢查輸入欄下方所顯示的精確預覽中的空白配置,然後將剩餘的文字下載為 UTF-8 純文字 TXT 檔。預覽保留換行與定位字元;視覺上的換行並不會在下載的檔案中插入額外的換行位元組。

編輯原始文字會清除先前的預覽,並撤銷其下載網址,因此你可以貼上修正過的版本重新執行,而不會把過時的結果往下帶。如果輸入內容中的每個字素都是表情符號,清理後的輸出將是空字串,但已移除數量仍會回報已完成的工作。原始輸入會在文字區中保持不變,讓你可以並列比較兩者。

空白的輸入,以及超過一百萬字元上限的文字,會顯示明確的錯誤訊息而非部分結果,這代表清理工具告訴你切割步驟根本沒有執行。產生的 TXT 檔不含位元組順序記號,因此可以乾淨地貼到在乎精確位元組序列的編輯器、終端機以及下游工具中。

這在真實文字中實際會出現在哪些地方

客服對話紀錄與複製下來的聊天記錄是最常見的來源。一段兩行的客戶訊息,可能就把一個讚、一面國旗、一個多人家庭表情符號以及一個按鍵組合全塞進同一段文字中,而清理工具會把它們全部移除,卻不動到周圍的文字。準備給會拒絕表情符號的系統使用的社群貼文——像是 CRM 工單欄位、搜尋索引、SMS 閘道、在輔助平面字元上會出錯的 CSV 匯入——也都適用同一道處理程序。

以純文字形式準備的檔名、不該從繪文字中學習的機器學習工作資料集行,以及需要當作純文字閱讀的一般語言文件,全都符合相同的模式。另一個相關任務——從 Outlook 郵件中移除表情符號回應——是把同一個字素層級的規則套用到範圍更窄的來源上。若需要關於保留周圍文字的更廣泛背景,可參考在不移除格式的前提下移除表情符號的一般指南,它會從不同角度介紹同一個工具。

清理工具會與不會移除的內容

偵測採用的是標準化的 Unicode 屬性逃逸——延伸繪文字、區域指示符號以及按鍵組合標記——再加上瀏覽器端的字素切割,而不是手寫的對照表。這代表結果遵循你瀏覽器目前實作的 Unicode 版本,並會隨著引擎採用較新資料而演進。部分繪文字符號同時具備文字與表情符號兩種呈現慣例;只要屬於相關 Unicode 屬性所分類的符號,即便某個字型把它顯示為單色,也會被移除;而不屬於該規則分類的裝飾性文字則會保留。

輸入類型範例結果
單一表情符號😀移除
膚色修飾符序列👍🏽以一個叢集移除
職業表情符號👩🏽‍🔧以一個叢集移除
連在一起的家庭符號👨‍👩‍👧‍👦以一個叢集移除
國家國旗🇯🇵以一個叢集移除
按鍵組合3️⃣以一個叢集移除
字母與數字abc 123保留
空白與換行(任意空白)保留在原本位置
顏文字(^_^)保留
ASCII 表情符號:))保留
平台短代碼:thumbsup:保留
圖片貼圖檔案(PNG / JPEG)超出處理範圍

清理工具刻意不會動到空白。一個表情符號夾在兩個空白之間,輸出時兩個空白都會留下,因為自動壓縮空白可能會破壞等寬表格、程式碼區塊、縮排大綱,或是仰賴這個間距維持清晰度的句子。如果你確實想要壓縮空白,空白清理工具是一個獨立、明確的步驟,可以在輸出之後接著執行。

這個工具不會移除由一般標點符號組成的顏文字、ASCII 表情符號、像冒號-名稱-冒號這樣的自訂平台短代碼,或實際的圖片貼圖。它也不會檢查 Word 文件、PDF、HTML 標記語意、檔名、剪貼簿紀錄或遠端內容;它只會轉換放在文字區中的那一段字串。

在你把結果貼到任何地方之前先檢查一下

工具所顯示的預覽,就是會被寫入下載檔案的精確字串。如果文字將會進入結構化的位置——CSV 欄位、資料庫欄位、必須符合固定範本的留言——請逐行與輸入比對。長行在預覽中會以視覺方式換行,但底層的換行位元組並未改變,因此一段 200 個字元的句子下載下來仍然是一行。在句子中間移除一個表情符號,常常會留下原本表情符號位置前後的兩個空格;這是刻意的設計,因為壓縮間距可能會改變文字的可見節奏。

如果你想要對「到底改變了什麼」取得第二意見,Unicode 屬性類別逃逸文件說明了清理工具所仰賴的確切字元類別;把那份說明搭配可見的數量一起看,就能清楚判斷你在意的表情符號是否都被抓到了。若要取得跨多列的總計,可以將清理後的輸出貼入行數計算器字數計算器,在往下游推送之前確認剩餘內容的形狀。