將 ASCII 轉換為字元,表示將介於 0 到 127 之間的十進位值對應回標準 7 位元 ASCII 表所指定的確切字元:65 變成 "A",97 變成 "a",32 變成空格,10 變成換行符號。每當你手邊有一串十進位數字(來自記錄檔、程式練習、網路協定擷取資料,或教科書範例),而需要查看或複製這些數字所代表的字元時,就會遇到這個工作。標準 ASCII 僅涵蓋 0 到 127 的值,因此任何超出此範圍的數字都代表該資料並非 ASCII,需要使用不同的解碼器,例如 UTF-8 或字碼頁工具。由於 7 位元表格已完全標準化(請參閱 IETF RFC 20 以及 Unicode C0 控制字元與基本拉丁文表格),因此轉換是確定性的:相同的十進位值在任何符合規範的系統上都會產生相同的字元,而嚴格的轉換器會採取 fail closed 的方式,而不是猜測結果。

how to convert ascii to char
how to convert ascii to char

ASCII 表的組織方式

7 位元 ASCII 表將其 128 個碼位劃分為幾個大致分類。代碼 0 到 31 為 C0 控制字元,原本設計用來控制電傳打字機與早期終端機——例如定位點 (Tab)、換行 (LF)、歸位 (CR)、跳脫 (Escape) 等等。代碼 32 為空格;代碼 33 到 47 為標點符號;代碼 48 到 57 為數字 0 到 9;代碼 65 到 90 為大寫拉丁字母 A 到 Z;代碼 97 到 122 為小寫拉丁字母 a 到 z。其餘位置(58–64、91–96、123–126)為標點符號與括號,而 127 是 DEL 刪除控制字元。精確的指定來自 RFC 20(定義 ASCII 的標準),並反映在 Unicode C0 控制字元與基本拉丁文表格中,使前 128 個 Unicode 碼位與 ASCII 保持逐位元組相容。記住表格的高階輪廓——數字在 48、大寫在 65、小寫在 97——可讓大多數「由 ASCII 查字元」的操作無需參考資料即可完成。

如何將 ASCII 代碼轉換為字元

若要進行快速且經過錯誤檢查的轉換,請開啟 ASCII 轉換器並依照下列步驟操作:

  1. 選擇「Codes to Text」,讓工具知道你要輸入的是十進位數字而非純文字。
  2. 將你的十進位數值清單貼到輸入區中,數字之間以空格、逗號或換行分隔——任何混合方式皆可,因為分詞器會將空白字元與逗號視為分隔符號。
  3. 點擊「Convert ASCII」,並在輸出區讀取結果。
  4. 檢查輸出中是否含有不可見的控制字元(定位點、換行符號、NUL),僅複製可見的部分;或者若你需要保留結構完整,則複製十進位輸出。

同一工具也支援反向操作:選擇「Text to Codes」可將每個字元轉為以空格分隔的十進位整數。兩個方向都強制執行相同的 0–127 邊界。

一個完整的範例

以十進位清單「72 101 108 108 111」為例。對照 ASCII 表讀取,72 為 "H",101 為 "e",108 為 "l",108 為 "l",111 為 "o"。串接起來,這五個代碼拼成 "Hello"。這也是解碼器內部執行的相同運算:以空白與逗號作為分隔符號進行分詞、將每個 token 解析為 0 到 127 之間的無符號整數、然後查詢對應字元。你的輸入與輸出之間不會有任何其他改變。關於這些字元的二進位表示,請參閱 實用的 ASCII 轉二進位教學

理解輸出中的控制字元

解碼 ASCII 最令人意外的部分,是 0–31 與 127 這些代碼根本不會產生任何可列印字形。代碼 9 為定位點 (Tab),10 為換行 (LF),13 為歸位 (CR),0 為 NUL,127 為 DEL。當你解碼的清單中含有 9 時,輸出文字區可能會前進到下一個定位停駐點;當含有 10 或 13 時,可能會插入換行;當含有其他控制字元(例如 1、2、7 或 127)時,由於它們在純文字中沒有視覺呈現,你會什麼都看不到。將這些不可見字元複製到其他應用程式,可能會引發應用程式特有的行為——例如,檔名欄位中的定位點可能被靜默地去除,而一個多餘的 NUL 可能會使解析器發生錯誤。如果需要可見性,請改用十進位輸出,或將代碼貼到能感知位元組的編輯器(例如十六進位檢視器)中。以下列出大多數人會遇到的常見控制字元。

十進位名稱視覺行為
0NUL無字形
9Tab前進到下一個定位停駐點
10換行 (LF)插入換行
13歸位 (CR)插入換行
32Space可見的空白
127DEL無字形

當 ASCII 不是正確的編碼時

ASCII 常被寬鬆地當作「純文字」的同義詞,但嚴格的 7 位元表格僅涵蓋拉丁字母、數字、常見標點符號,以及 33 個控制代碼。它並不包含帶有變音符號的字母(é、ñ、ü)、非拉丁文字(漢字、Ж、א)、表情符號,或任何十進位 127 以上的符號。如果你的輸入含有這類字元,ASCII 解碼器必須拒絕它們,因為「延伸 ASCII」一詞可能指數種互不相容的字碼頁(Windows-1252、ISO-8859-1、MacRoman 等等),它們對 127 以上的值各有不同的定義。ASCII 轉換器採取 fail closed 機制:一旦遇到 0–127 之外的字元便停止,並回報其位置,而非猜測字碼頁。對於含有變音符號的拉丁文字、表情符號或 CJK,請使用支援 UTF-8 的轉換器;若為來自網路擷取的原始位元組,請使用嚴格解碼 UTF-8 的十六進位轉文字工具。官方的對應關係固定在 Unicode C0 控制字元與基本拉丁文表格中。

ASCII 轉換器與相關編碼工具的比較

不同的編碼工具解決不同的工作,了解哪一個符合你實際擁有的資料會很有幫助。下表列出最常見的鄰近工具及其用途。

工具輸入格式輸出格式使用時機
ASCII 轉換器ASCII 文字或 0–127 的十進位十進位代碼或 ASCII 文字嚴格的 7 位元往返轉換
ASCII 表無(參考用)可單列搜尋的參考資料查詢單一值
文字轉十六進位UTF-8 文字十六進位位元組需要位元組層級的編碼
二進位轉文字UTF-8 文字或 8 位元二進位UTF-8 文字或 8 位元二進位使用二進位而非十進位作業
Base64 編碼 / 解碼UTF-8 文字或 Base64Base64 或 UTF-8 文字可安全傳輸的文字承載

關鍵差異在於範圍。ASCII 轉換器將完整的文字序列視為十進位 7 位元值來處理;而十六進位或二進位轉換器則編碼相同字元的 UTF-8 位元組表示(每個字元可能橫跨一個或多個位元組)。若是涉及 Unicode 碼位、UTF-8 位元組、舊式字碼頁或特定語系字元轉換,請改用具名標示其編碼方式的轉換器,而非預設為 ASCII。

需要留意的實務限制

ASCII 轉換器強制執行標準 7 位元 ASCII 與十進位代碼值之間的嚴格雙向轉換。編碼時,會拒絕第一個超出 7 位元 ASCII 的字元,並回報其在輸入中的位置。解碼時,僅接受純十進位整數,並拒絕正負號、分數、十六進位前置符號、空 token,以及任何大於 127 的值。輸入上限為 100,000 個 UTF-16 碼元,解碼上限為 50,000 個代碼,因此極大的清單應拆分為多個區塊。所有處理皆在目前的瀏覽器分頁中進行——編碼、解碼與驗證都在本機執行,沒有任何輸入會被上傳。八組獨立的標準 fixture 固定了上下邊界:定位點 (TAB)、換行 (LF)、空格、數字零、大寫 A、小寫 a 與上邊界,使往返轉換可重現。這些限制的存在,是為了讓工具在資料並非 ASCII 時能採取 fail closed,這對確定性的 7 位元表格而言是最安全的行為。

若你正在權衡各種方案,免寫程式在 C++ 中將 ASCII 轉換為 Char對此有詳細說明。