
Unicode 字元碼實際識別的是什麼
Unicode 字元碼是 Unicode 標準中指派給某個抽象字元的固定純量值,以十六進位寫成 U+XXXX —— A 是 U+0041,😀 是 U+1F600 —— 在 Android 上你可以不必安裝 App 就查詢任何字元的碼點,只要開啟一個在本機運作的瀏覽器式 Unicode 編碼器 / 解碼器即可。該工具會逐一處理 Unicode 純量值,而非 JavaScript UTF-16 碼元,因此輔助平面的字元會保持單一標籤,絕不會被拆成代理對。基礎字元至少會有四位十六進位數字,因此大寫字母 A 顯示為 U+0041,小寫 é 顯示為 U+00E9,像 🇯🇵 這類國旗則位於 U+1F1EF U+1F1F5,因為它是區域指標對,而非單一字元。
有效的純量值範圍涵蓋 U+0000 到 U+10FFFF,其中 U+D800 到 U+DFFF 這段區間刻意排除,因為這些數字保留供 UTF-16 代理碼元使用,本身並不對應任何字元。當你在手機上讀取輸出時,你看到的每個代碼都是真實、獨立的碼點。如果工具拒絕某個代碼,可能是因為超出範圍、落在代理空隙內、缺少 U+ 或 \u{...} 前綴,或是含有非十六進位字元。沒有任何內容會被悄悄替換 —— 你看到的診斷訊息,與嚴格純量檢查所產生的結果完全一致。
Unicode 碼點與 Android 按鍵碼的差異
許多搜尋「char code lookup on android」的 Android 開發者,其實在找的是 Android 輸入系統所使用的整數值,例如 KeyEvent.KEYCODE_A = 29 或 KeyEvent.KEYCODE_HOME = 3。那些是 Android 的輸入常數:來自 android.view.KeyEvent 類別的小整數,用來識別實體按鍵或軟體按鈕,而非字元。字母 A 的 Unicode 碼點是完全不同的數字 U+0041,它屬於 Unicode 標準,而非 Android SDK。把這兩者搞混,是從手機「查到的」ASCII 值結果用錯工作最常見的原因之一。
| 代碼系統 | 識別內容 | A 的範例 | é 的範例 | 😀 的範例 |
|---|---|---|---|---|
| Unicode 碼點 (U+XXXX) | Unicode 標準中的單一抽象字元 | U+0041 | U+00E9 | U+1F600 |
| Android KeyEvent 常數 | Android SDK 中的實體按鍵或軟體按鈕 | KEYCODE_A = 29 | 無直接按鍵碼 (變音符號須組合輸入) | 無按鍵碼 (表情符號並非按鍵事件) |
| UTF-8 位元組序列 | 碼點在 UTF-8 編碼中的位元組表示 | 0x41 | 0xC3 0xA9 | 0xF0 0x9F 0x98 0x80 |
如果你的目標是識別抽象符號 —— 例如要把某個字元貼入正則表達式、URL、檔名或程式碼註解 —— 請使用 Unicode 碼點。如果你的目標是在 Android 應用程式中回應實體按鍵的按下事件,請使用來自 android.view.KeyEvent 的 KeyEvent 常數。這兩套系統永遠不會互相衝突,但你所讀到的搜尋結果片段可能只提到其中一套,因此知道自己在哪個尺度上工作是很有幫助的。本站的相關工具 UTF-8 編碼器 / 解碼器 提供了同一條等式的位元組端內容,當你實際需要的是檔案格式層級時相當實用。
如何在 Android 手機上查詢字元碼
不需要安裝任何東西。該工具是單一網頁,完全在瀏覽器中執行,因此任何現代的 Android 瀏覽器 —— Chrome、Samsung Internet、Firefox、Brave、Edge —— 都能使用。當你在手機上需要某個字元的碼點時,請依照以下步驟操作。
- 開啟 Android 瀏覽器並前往 Unicode 編碼器 / 解碼器。該頁面以靜態 HTML 載入,對行動數據很友善。
- 確認模式選擇器設定為 text-to-code-points。頁面提供兩個方向,此流程需要的是編碼。
- 在輸入欄位中長按,選擇 貼上,並貼上你想檢查的確切字串,包括任何不可見字元,例如空格、Tab 或零寬連接符。
- 點選 轉換。輸出面板會每行填入一個 U+ 代碼,輔助平面字元會維持單一 U+1F600 形式的純量值,不會被拆成代理半部。
- 複製 U+ 序列。
- 若要反向操作,切換到 code-points-to-text 並貼上前綴格式的代碼,例如以空格、逗號或換行分隔的 U+1F600 U+1F44D 或 \u{1F600}\u{1F44D}。當所有代碼皆通過純量驗證後,對應的文字就會出現。
由於轉換在本機執行,你貼上的文字絕不會離開手機;當字串含有敏感識別符、草稿檔名或從其他 App 貼上的剪貼簿內容時,這點格外重要。
解讀手機上的 U+ 輸出
轉換執行完成後,每一行輸出面板會顯示一個 Unicode 純量值。相鄰的代碼依輸入順序屬於同一字串,因此序列本身就是答案 —— 而非僅有個別值。在手機上的一個實用技巧是快速掃過清單,找出任何以 U+200D、U+200C、U+FEFF 或 U+2060 開頭的項目,因為這些都是零寬且預設可忽略的值,往往能解釋為何貼上的文字在搜尋框、表單欄位或檔名比對中行為異常。
| 代碼 | 內容說明 | 在手機上為何重要 |
|---|---|---|
| U+000A | 換行 (Line feed) | 說明從桌面日誌貼上時出現非預期斷行的原因 |
| U+0020 | 一般空格 | 常被搜尋與相等性檢查誤認為 U+00A0 (不斷行空格) |
| U+200D | 零寬連接符 | 將 👩💻 等表情符號由多個純量值組合成單一可見字素 |
| U+FEFF | 位元組順序記號 / 零寬不斷行空格 | 隱形前綴,會破壞嚴格字串比對 |
| U+2060 | 文字連接符 | 不可見的黏合點,可防止特定位置換行 |
單一可見的表情符號可能由多個碼點組成。例如開發者表情符號 👩💻 會依序拆成三個 Unicode 純量值:U+1F469 (女性)、U+200D (零寬連接符) 與 U+1F4BB (筆記型電腦)。因此從左到右閱讀 U+ 清單,就是檔案或訊息中實際包含的字面序列,也是當兩個字串「看起來相同」卻因連接符或變體選擇器而比對失敗時的最終依據。相同的邏輯也適用於國旗 (兩個區域指標)、膚色表情符號 (基底字元加上 Fitzpatrick 修飾符)、家庭表情符號、可預先組合或分解的變音字母,以及大多數含表意空格的 CJK 標點。
將前綴代碼解碼回文字
當你手上有一串碼點 —— 通常是從文件、堆疊追蹤、JSON 日誌或同事的訊息中複製而來 —— 把它們貼到解碼模式,頁面就會重建出對應的字串。接受的前綴格式為 U+ 加十六進位數字,以及 ECMAScript 中 String.fromCodePoint 所使用的 JavaScript 風格 \u{...} 大括號表示法。十六進位不區分大小寫,因此 u+1f600、U+1F600 與 \u{1F600} 都會解碼為同一個純量值。
代碼之間可以用空格、逗號或換行分隔。相鄰的數值如果可能被誤認為更長的一串十六進位數字,必須保留各自的前綴與可見分隔符。你可以在手機上做一個快速測試:貼上 U+1F600 U+1F44D 並確認解碼後的字串是兩個表情符號 (😀 與 👍),而非一個混亂的單一字元。如果解碼拒絕某個代碼,並不會悄悄替換。字元碼查詢速查表 將精確的 U+XXXX 與 \u{...} 語法規則集中在一頁,當你需要工具旁的乾淨參考資料時非常方便。
行動瀏覽器上的限制與邊界情況
該頁面將單次轉換上限設為 100,000 個碼點,這對於非常長的貼上字串已足夠,但代表百萬位元組等級的傾印會被截斷。如果你要檢查整行日誌或設定檔,請記住這個上限。除了上限之外,工具刻意不做以下幾件事,列出來有助於避免在小螢幕上誤讀輸出。
- 不輸出 UTF-8 位元組。顯示的值是抽象的碼點。若需要位元組層級的工作,請使用 UTF-8 轉換器 —— é 的兩位元組 UTF-8 表示為 0xC3 0xA9,這在這個工具中看不到。
- 不進行正規化。預先組合的 é (U+00E9) 與分解的 e + 組合尖音符 (U+0065 U+0301) 會被視為不同的序列,即使許多字型將它們渲染得一樣。當你在除錯「為什麼搜尋不到」時,這種精確性反而是優點。
- 不提供字元名稱、字集或易混淆狀態。該工具只回答「這個字串中含有哪些純量值」,僅此而已。易混淆、名稱與字集資訊屬於其他的 Unicode 屬性。
- 不進行字素聚類。輸出是純量序列,而非依使用者感知字元進行的切割。對大多數診斷工作而言,這正是你想要的結果。
- 代理值會被拒絕。U+D800 到 U+DFFF 範圍內的輸入永遠不會產生文字,因為它們並非獨立的純量值。這避免了「錯誤的代理慣例與自己來回轉換一致」的常見自洽陷阱。
針對手機的使用,有兩點實用建議。首先,瀏覽器的貼上選單有時會去掉結尾的換行或合併多個空格,因此若你的除錯依賴不可見字元,請從會保留它們的 App 貼上,並在轉換後重新檢查 U+ 清單。其次,較長的輸出面板在橫向模式下更容易閱讀,每個代碼各自一行而不需橫向捲動;當你掃描混合基本與輔助平面字元的字串時,這點格外重要。
想深入了解,請參閱 Android 上的 ASCII 碼轉換器:無需安裝 App。