標準 7 位元 ASCII 會為 128 個字元與控制碼指派 0 到 127 的唯一整數,而 Java 會透過其無號 16 位元 char 型別,以及經由轉型產生的 int 值來表示相同的整數。若要在 Java 中使用 ASCII 碼,您需要具備三項要素:字元或控制碼的確切數值、一種能在十進位、十六進位、八進位與二進位之間可靠查詢該值的方式,以及對 Java 原始資料型別如何呈現這些數字的瞭解。十進位值與字型的對應由 RFC 20 與 Unicode 基本拉丁字元表固定,因此大寫 A 始終為 65 (0x41),小寫 a 始終為 97 (0x61),數字 0 始終為 48 (0x30)。NUL、HT、LF 與 CR 等控制碼使用 RFC 20 定義的縮寫,因為它們沒有可列印的字型。Java 程式碼很少會直接寫死這些值,但若在剖析協定、檢查檔案格式、測試字元類別或清理記錄時直接使用,精確性便至關重要,因為錯誤的位元組會在不知不覺中破壞資料。ASCII 對照表讓 Java 開發人員能快速、確切地查詢 0 到 127 的每個值,並以 Java 原始碼實際使用的四種表示法呈現。

每位 Java 開發人員都必須瞭解的 ASCII 碼基礎
美國資訊交換標準碼由 RFC 20 與 ISO/IEC 646 定義,是一套 7 位元碼集,恰好具有 128 個位置,以十進位 0 到 127 編號。撰寫 Java 程式碼時,碼表會劃分為四個重要區域:0 到 31 的控制碼、32 的空白字元、33 到 126 的圖形字元,以及 127 的刪除字元。RFC 20 提供控制區域的縮寫與完整名稱,而 Unicode 基本拉丁字元表則提供可列印的標點符號、數字與字母名稱。ECMA-6 確認了 7 位元、128 個字元的範圍,也說明了 127 的邊界是有意設定,而非偶然形成。
127 以上的值不屬於標準 ASCII。位元組值 128 到 255 代表哪些字元,取決於檔案或協定使用的是 ISO-8859-1、Windows 字碼頁,或 CP437 等 IBM PC 字碼頁。將它們視為「延伸 ASCII」會掩蓋這種歧義。Java 的 char 型別可容納較高值,因為它是受 UTF-16 支援的 16 位元無號型別,但這些碼本身不在 ASCII 標準範圍內,而是取決於另一項編碼決策。對於大多數涉及拉丁字母、標點符號與數字檢查的 Java 工作,您實際需要驗證的是 0 到 127 的範圍。
Java 如何儲存 ASCII 值:char、int 與轉型
Java char 是一種無號 16 位元整數,可容納一個 UTF-16 碼元。當該碼元對應至 ASCII 字元時,由於 Unicode 為 ASCII 字元指派的碼點與其標準十進位值相同,因此數值會與 ASCII 完全一致。將 char 轉型為 int 時會擴大範圍,而不會進行正負號擴充,因此結果始終是 0 到 65535 範圍內的非負整數。Java 中沒有負數 ASCII 碼,即使其他某些語言會將相同位元組顯示為有號值。
在 Java 中使用 ASCII 碼時,最常見的模式是轉型、比較與剖析。轉型 (int) 'A' 會產生 65。比較 c >= '0' && c <= '9' 可在不配置字串的情況下,檢查字元是否為 ASCII 數字。使用 Integer.parseInt(hex, 16) 或 Integer.parseInt(octal, 8) 進行剖析,會將文字表示法轉換為 ASCII 對照表中所顯示的相同整數。這些模式取決於您手邊是否有正確的參考值,而這正是結構化查詢比記憶或猜測更可靠之處。
Java 開發人員常用的 ASCII 值
下表列出 Java 程式碼最常使用的 ASCII 位置。每個值都來自 RFC 20 或 Unicode 基本拉丁字元表,ASCII 對照表同樣以這兩項來源建立。請記住規律,而不是記住每個個別數字:數字介於 48 到 57,大寫字母介於 65 到 90,小寫字母介於 97 到 122。
| 字元 | 十進位 | 十六進位 | 八進位 | 二進位 | 常見 Java 用途 |
|---|---|---|---|---|---|
| NUL | 0 | 0x00 | 0o000 | 0b0000000 | C 字串終止符、空位元組標記 |
| HT (Tab) | 9 | 0x09 | 0o011 | 0b0001001 | 對齊欄位的記錄欄、清理 CSV |
| LF | 10 | 0x0A | 0o012 | 0b0001010 | BufferedReader 中的 Unix 行終止符 |
| CR | 13 | 0x0D | 0o015 | 0b0001101 | 歸位字元,Windows 上 CRLF 的一部分 |
| SP (Space) | 32 | 0x20 | 0o040 | 0b0100000 | 空白權杖邊界、String.trim() |
| '0' 到 '9' | 48 到 57 | 0x30 到 0x39 | 0o060 到 0o071 | 0b0110000 到 0b0111001 | 剖析 ASCII 數字、以 10 為基數的驗證 |
| 'A' 到 'Z' | 65 到 90 | 0x41 到 0x5A | 0o101 到 0o132 | 0b1000001 到 0b1011010 | 識別項開頭檢查、字母大小寫轉換 |
| 'a' 到 'z' | 97 到 122 | 0x61 到 0x7A | 0o141 到 0o172 | 0b1100001 到 0b1111010 | 剖析小寫字母、與地區設定無關的比較 |
| DEL | 127 | 0x7F | 0o177 | 0b1111111 | 倒退鍵哨兵、終端機控制序列 |
瞭解這些範圍後,您就能撰寫比規則運算式更快、比 Character.isLetter 呼叫更容易閱讀的範圍檢查,尤其是在您明確需要僅限 ASCII 的行為時。若要處理超出 ASCII 的更廣泛字元類別,以程式設計為主的 ASCII 指南會說明如何將相同概念套用至多種語言。
如何查詢 Java 的 ASCII 碼
ASCII 對照表是一套以瀏覽器為基礎的參考工具,包含全部 128 個標準碼位置,並以 Java 原始碼使用的相同四種數字表示法顯示每個值。當您需要將經過驗證的值放入程式碼時,請依照下列步驟操作。
- 在瀏覽器中開啟 ASCII 對照表。您會看到完整的 128 列清單;每列會顯示字元或控制縮寫、說明名稱、十進位、兩位數十六進位、三位數八進位、七位元二進位與類別。
- 決定您要查詢特定字元的值,還是瀏覽某個類別。若要尋找單一程式碼,請使用搜尋方塊。若要瀏覽所有數字或所有大寫字母等群組,請將搜尋方塊留白,然後從篩選器中選擇類別。
- 使用您已具備的任一表示法在搜尋方塊中輸入內容。65 等純數字會視為確切的十進位值。十六進位需要 0x 前置字元,八進位需要 0o,二進位需要 0b,因此 0x41、0o101 與 0b1000001 都會傳回大寫 A。您也可以輸入 line feed 等名稱、LF 等縮寫,或使用 char:value 語法輸入 char:A 或 char:space 等常值字元。
- 並排閱讀字元欄與四個數字欄,以確認相符的列。十進位值是來源整數;十六進位會補至兩位數,八進位會補至三位數,二進位會補至七位數,這與 Java 使用 Integer.toHexString、Integer.toOctalString 與 Integer.toBinaryString 列印的固定寬度前置格式相符。
- 在所需列上選取複製。複製按鈕會以易於閱讀的文字格式寫入一整列,包括顯示值、名稱、十進位、十六進位、八進位與二進位。直接將該行貼到程式碼註解、錯誤報告、協定說明或教學投影片中。
搜尋字詞與複製的列會在瀏覽器內處理,因此不會將任何碼點查詢傳送至遠端服務。如果剪貼簿權限遭拒,頁面會回報失敗,而不會顯示複製成功;變更搜尋內容或類別時,也會清除先前的複製訊息,避免過時輸出流入您的編輯器。
在 Java 中使用 ASCII 碼:實用模式
取得確切值後,少數幾種模式便能涵蓋大部分實際的 Java 工作。第一種是簡單的轉型:int code = (int) 'A'; 會產生 65,接著可使用 String.format("0x%02X", code) 將其格式化,以取得 0x41,與表格的十六進位欄相符。第二種模式是測試 ASCII 數字與字母的範圍;當您明確需要 ASCII 行為時,可避免使用會受地區設定影響的方法:
boolean isAsciiDigit(char c) { return c >= '0' && c <= '9'; } boolean isAsciiUpper(char c) { return c >= 'A' && c <= 'Z'; } boolean isAsciiLower(char c) { return c >= 'a' && c <= 'z'; }第三種模式是反向轉換;當協定提供整數,而您必須產生字元時,便需要這種模式。由於 ASCII 與 Unicode 在 0 到 127 的範圍內一致,因此將該範圍內的 int 轉型為 char 會產生相符的 ASCII 字型。對於沒有可列印字型的控制碼,應記錄 RFC 20 的縮寫 (例如 LF 或 CR),而不是嘗試列印該位元組。
第四種模式是處理行尾。Java 的 BufferedReader 會讀取 Unix 風格檔案中的 LF,以及 Windows 風格檔案中的 CRLF,而 Scanner 會將 CR、LF 與 CRLF 視為行終止符。瞭解 LF 為十進位 10、CR 為十進位 13 後,您就能撰寫明確的掃描器,依任一位元組將輸入分成權杖;這在剖析網路協定或精簡二進位記錄時很實用,因為其中的混合行尾具有特定意義。RFC 20 的慣例在此適用,但 CR、LF 與 CRLF 是取決於情境的平台及協定慣例,因此表格會提供數字,而周圍的程式碼則決定其意義。
值得瞭解的搜尋訣竅與邊界案例
熟悉 ASCII 對照表的幾項行為後,便能節省時間。類別篩選器可將表格縮小至控制、空白、標點符號、數字、大寫字母、小寫字母或刪除,並保留每個相符列的顯示,而不會將其截斷,因此「標點符號」等範圍廣泛的類別仍會顯示完整的標點符號範圍。十進位 32 會明確顯示為 SP,並歸入空白類別;十進位 127 則會在專屬的刪除類別中顯示為 DEL,因為 RFC 20 指出,DEL 並非嚴格意義上的控制字元。這些差異能讓表格如實反映哪些內容可列印、哪些是控制項,以及哪些是歷史上的刪除哨兵。
將一列貼到註解時,最好同時附上四種數字表示法,而不只提供十進位值。程式碼審查者能更快發現 0x4A 中的錯字,而非僅有數字 74;而列出十進位、十六進位、八進位與二進位值的錯誤報告,無論閱讀問題單的人如何重新排版,資訊都不會失真。如果您正在解碼的檔案中出現 127 以上的位元組,對照表將不會包含該值,因為此範圍不在標準 ASCII 內;請先識別實際編碼,因為單靠數字無法得知原本要表示哪個字型。ECMA-6 記錄了產生此邊界的 7 位元範圍,而您可將相關標準參考資料的副本加入書籤,放在工具旁邊,以便在這些時刻隨時查閱。