ASCII 碼是運算中文字表示的基礎,把 128 個標準字元對應到十進位、十六進位、八進位與二進位格式的獨一無二數值。每個字元——從大寫字母與數字,到標點以及換行或 tab 這類控制碼——都有固定的 7 位元二進位碼(0000000 到 1111111),對應十進位值 0 到 127。例如,大寫字母「A」是十進位 65、十六進位 0x41、八進位 101、二進位 01000001。這些編碼對程式設計、資料處理與硬體通訊至關重要,因為文字必須編成數字。沒有 ASCII,系統就缺乏一致的方式來儲存、傳輸或解讀文字,導致亂碼輸出或資料傳輸失敗。雖然現代系統常用 Unicode(其中包含 ASCII 作為子集),ASCII 對低階任務、舊有系統,以及需要精簡 7 位元編碼的 HTTP 標頭這類協定仍然關鍵。無論你在除錯字串、撰寫指令碼,或設定裝置,懂得使用 ASCII 碼都能確保跨平台的準確度與相容性。
ASCII 碼用在無數情境,從寫程式到排查資料損毀。例如,若檔案看起來損壞,把原始位元組對照 ASCII 碼,可以看出不可列印的控制字元(例如換行的 0x0A 或歸位的 0x0D)是否錯置。同樣地,SMTP 或 FTP 這類網路協定仰賴 ASCII 控制碼(例如跳脫序列的 0x1B)來發出指令訊號。在程式設計中,Python 的 chr() 或 JavaScript 的 String.fromCharCode() 這類函式把 ASCII 碼轉成字元,而 ord() 或 charCodeAt() 則做反向轉換。即使在硬體上,印表機或微控制器這類裝置也用 ASCII 碼來解讀指令或顯示文字。例如,把十進位 65 送到序列埠,連接的 LCD 螢幕就會輸出字母「A」。然而困難在於要即時記住或算出這些編碼。手動在十進位、十六進位與二進位之間轉換容易出錯,尤其是較不常見的字元,例如鈴(0x07)或換頁(0x0C)。這正是 ASCII 表工具 變得非常有價值之處——它提供任何字元或編碼的即時、準確查詢,免除猜測。

ASCII 碼是什麼、如何運作?
ASCII 碼是 7 位元 ASCII 標準中字元的數值表示,該標準包含 128 個獨一無二的編碼(0–127)。這些編碼分成兩大類:控制字元(0–31 與 127)與可列印字元(32–126)。控制字元,例如換行(10)、歸位(13)或跳脫(27),不可列印,用來控制裝置或格式化文字。可列印字元包括字母(A–Z、a–z)、數字(0–9)、標點(!、?、@)與符號(#、$、%)。每個編碼以四種格式表示:
| 格式 | 範圍 | 範例(字母「A」) | 用途 |
|---|---|---|---|
| 十進位 | 0–127 | 65 | 程式函式(例如 Python 的 chr(65)) |
| 十六進位 | 0x00–0x7F | 0x41 | 記憶體傾印、除錯、硬體暫存器 |
| 八進位 | 0–177 | 101 | Unix 檔案權限、舊有系統 |
| 二進位 | 0000000–1111111 | 01000001 | 位元運算、低階協定 |
ASCII 標準由美國標準協會(現為 ANSI)於 1963 年推出,用來統一不同電腦與裝置的文字編碼。在 ASCII 之前,各製造商使用專屬編碼,讓資料交換幾乎不可能。例如,IBM 的 EBCDIC 編碼對相同字元使用不同的編碼集合,導致相容性問題。ASCII 以所有系統都能採用的通用對應解決了這點。如今,ASCII 仍是許多協定的骨幹,包括 HTTP、SMTP 與 FTP,其中標頭與指令以 ASCII 文字傳送。即使在現代 Unicode 系統中,ASCII 也保留為前 128 個字元,以確保向下相容。對開發者而言,理解 ASCII 對剖析記錄檔、撰寫二進位安全的程式碼,或除錯網路封包這類任務至關重要。例如,字串中錯置的空字元(0x00)可能意外截斷資料,而缺少歸位(0x0D)可能造成文字檔的格式問題。查閱 ASCII 表,你就能迅速辨識這些問題,不必背下每個編碼。
在瀏覽器中尋找並複製 ASCII 碼
手動查 ASCII 碼——無論是教科書、PDF,或散落的線上資料——又慢又容易出錯。ASCII 表工具 能讓你在瀏覽器中立刻搜尋、篩選並複製編碼來解決這點。以下是針對任何任務的用法:
- 開啟 ASCII 表工具,在瀏覽器中造訪 /dev/ascii-table/。無需安裝或註冊——它在瀏覽器本機運作。
- 搜尋字元或編碼,使用搜尋框。你可以輸入:
- 一個字元(例如「A」、「#」,或「 」代表空白)。
- 控制字元縮寫(例如「LF」代表換行,或「CR」代表歸位)。
- 十進位值(例如「65」)。
- 帶前綴的進位值(例如十六進位「0x41」、八進位「0101」,或二進位「0b01000001」)。
char:value語法(例如char:0代表空字元,或char:space代表空白)。
- 依類別篩選,若你要找特定類型的字元。此工具將編碼分為:
- 控制字元(不可列印編碼,如 tab、bell 或 escape)。
- 標點(例如 !、?、@)。
- 數字(0–9)。
- 大寫字母(A–Z)。
- 小寫字母(a–z)。
- 空白(編碼 32)。
- 刪除(編碼 127)。
- 檢視結果。每一列會顯示字元、十進位、十六進位、八進位與 7 位元二進位值。例如字母「a」會顯示:
字元 十進位 十六進位 八進位 二進位 a 97 0x61 141 01100001 - 複製你需要的編碼,點選該列的「複製」按鈕。工具會把精確值(例如十進位「97」或十六進位「0x61」)複製到剪貼簿,方便貼進程式碼或設定。
這個方法遠比手動轉換或背誦快。例如,若你正在撰寫指令碼來剖析記錄檔,需要檢查 tab 字元(0x09),可以搜尋「tab」或「0x09」,立刻看到其十進位(9)與二進位(00001001)對應。同樣地,若你在除錯網路封包並看到十六進位值「0x48」,可以搜尋它以確認代表字母「H」。此工具也處理邊界情況,例如常被忽略、但在字串比較或檔案剖析中至關重要的空白字元。使用 ASCII 表可避免錯誤並節省時間,若你正在處理小型指令碼或大規模資料管線。
ASCII 碼在程式設計中的實務用途
程式設計中使用 ASCII 碼來操作文字、處理控制字元,並確保跨系統相容性。以下是開發者在真實任務中使用 ASCII 碼的具體例子:
字串操作
許多程式語言提供在字元與其 ASCII 碼之間轉換的函式。例如:
- 在 Python 中,
ord("A")回傳 65,而chr(65)回傳 "A"。 - 在 JavaScript 中,
"A".charCodeAt(0)回傳 65,而String.fromCharCode(65)回傳 "A"。 - 在 C 中,
printf("%d", 'A');輸出 65,而putchar(65);印出 "A"。
這些函式對下列任務至關重要:
- 大小寫轉換:要把小寫字母轉成大寫,將其 ASCII 碼減去 32(例如 Python 的
chr(ord("a") - 32))。這能成立,是因為大寫字母比對應的小寫字母低 32 個編碼(例如 "a" 是 97,"A" 是 65)。 - 字元驗證:要檢查字元是否為數字,確認其 ASCII 碼是否落在 48("0")與 57("9")之間。例如在 Python:
if 48 <= ord(char) <= 57: print("Digit")。 - 字串排序:依字母順序排序字串仰賴比較 ASCII 碼。例如,"apple" 排在 "banana" 前面,因為 "a" 的 ASCII 碼(97)小於 "b"(98)。
檔案與資料處理
ASCII 碼對讀取、寫入與剖析檔案至關重要,尤其是 CSV、記錄檔或組態檔這類格式。例如:
- 偵測列結尾:文字檔依作業系統使用不同的列結尾:
- Windows:歸位(CR,0x0D)+ 換行(LF,0x0A)。
- Unix/Linux:換行(LF,0x0A)。
- 舊版 Mac:歸位(CR,0x0D)。
with open("file.txt", "rb") as f: data = f.read() if b"\r\n" in data: print("Windows line endings") elif b"\n" in data: print("Unix line endings") - 剖析 CSV 檔:CSV 檔用逗號(0x2C)與引號(0x22)分隔欄位。若欄位含逗號,必須用引號包住。例如,
"Smith, John",25這一行用引號跳脫姓名中的逗號。剖析時,你可以檢查這些編碼以正確分割欄位。 - 移除不可列印字元:記錄檔或使用者輸入可能含有會損毀資料的控制字元。你可以檢查字元的 ASCII 碼是否在可列印範圍(32–126)之外來過濾它們。例如在 Python:
clean_text = "".join(char for char in text if 32 <= ord(char) <= 126)
網路協定與硬體通訊
許多網路協定與硬體裝置使用 ASCII 碼傳送指令或資料。例如:
- HTTP 標頭:HTTP 請求與回應的標頭使用 ASCII 文字。例如,標頭
Content-Type: text/html是以每個字元的 ASCII 碼傳送。若標頭含非 ASCII 字元,必須編碼(例如使用 UTF-8)。 - 序列通訊:印表機、微控制器或感測器這類裝置常用 ASCII 碼傳送與接收指令。例如,把 ASCII 碼 65(字母 "A")送到序列埠,可能觸發裝置上的特定動作。同樣地,條碼掃描器可能輸出數字的 ASCII 碼(48–57)來表示掃到的數字。
- Telnet 與 FTP:這些協定使用 ASCII 控制碼發出指令訊號。例如,FTP 指令
USER username以每個字元的 ASCII 碼傳送,後面跟著歸位(0x0D)與換行(0x0A)。
除錯與低階任務
ASCII 碼對除錯與低階程式設計非常有價值。例如:
- 記憶體傾印:除錯程式當機時,記憶體傾印常以十六進位顯示原始位元組。把這些位元組轉成 ASCII,就能辨識字串或資料結構。例如,十六進位序列
48 65 6C 6C 6F在 ASCII 中對應 "Hello"。 - 二進位檔分析:Diff Checker 這類工具可把位元組轉成 ASCII 以提高可讀性,來比較二進位檔。例如,你可能比較兩個韌體檔,看特定字串(例如版本號碼)是否已變更。
- Unicode 疑難排解:雖然 Unicode 支援數千個字元,ASCII 仍是子集。若 Unicode 字串含非預期字元,你可以檢查它們是否落在 ASCII 範圍(0–127)以隔離問題。
各程式語言中的 ASCII 碼
不同程式語言處理 ASCII 碼的方式略有不同。以下是在若干最常用語言中使用 ASCII 碼的方式:
Python
Python 提供 ASCII 轉換的內建函式:
ord(char):回傳字元的 ASCII 碼。例如,ord("A")回傳 65。chr(code):回傳 ASCII 碼對應的字元。例如,chr(65)回傳 "A"。- 範例:將字串轉換成其 ASCII 碼:
text = "Hello" ascii_codes = [ord(char) for char in text] print(ascii_codes) # Output: [72, 101, 108, 108, 111] - 範例:過濾不可列印字元:
text = "Hello\x07World" # Contains a bell character clean_text = "".join(char for char in text if 32 <= ord(char) <= 126) print(clean_text) # Output: HelloWorld
JavaScript
JavaScript 使用下列方法:
charCodeAt(index):回傳特定索引處字元的 ASCII 碼。例如,"A".charCodeAt(0)回傳 65。String.fromCharCode(code1, code2, ...):回傳由 ASCII 碼組成的字串。例如,String.fromCharCode(65, 66, 67)回傳 "ABC"。- 範例:將字串轉換成 ASCII 碼:
let text = "Hello"; let asciiCodes = []; for (let i = 0; i < text.length; i++) { asciiCodes.push(text.charCodeAt(i)); } console.log(asciiCodes); // Output: [72, 101, 108, 108, 111] - 範例:檢查字元是否為數字:
function isDigit(char) { let code = char.charCodeAt(0); return code >= 48 && code <= 57; } console.log(isDigit("5")); // Output: true console.log(isDigit("A")); // Output: false
C/C++
在 C 與 C++ 中,字元本質上就是 ASCII 碼:
char變數儲存 ASCII 碼。例如,char c = 'A';儲存 65。- 範例:將字串轉換成 ASCII 碼:
#include <stdio.h> int main() { char text[] = "Hello"; for (int i = 0; text[i] != '\0'; i++) { printf("%d ", text[i]); } return 0; } // Output: 72 101 108 108 111 - 範例:檢查字元是否為大寫:
#include <stdio.h> int isUppercase(char c) { return c >= 'A' && c <= 'Z'; } int main() { printf("%d\n", isUppercase('A')); // Output: 1 (true) printf("%d\n", isUppercase('a')); // Output: 0 (false) return 0; }
Java
Java 使用下列方法:
char變數儲存 Unicode 碼點,但 ASCII 字元(0–127)是子集。例如,char c = 'A';儲存 65。(int) char:把char轉型成其 ASCII 碼。例如,(int) 'A'回傳 65。Character.toChars(code):把 ASCII 碼轉成字元。例如,Character.toChars(65)回傳 "A"。- 範例:將字串轉換成 ASCII 碼:
public class Main { public static void main(String[] args) { String text = "Hello"; for (int i = 0; i < text.length(); i++) { System.out.print((int) text.charAt(i) + " "); } } } // Output: 72 101 108 108 111 - 範例:檢查字元是否為字母:
public class Main { public static boolean isLetter(char c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); } public static void main(String[] args) { System.out.println(isLetter('A')); // Output: true System.out.println(isLetter('5')); // Output: false } }
SQL
MySQL 與 SQL Server 這類 SQL 資料庫提供處理 ASCII 碼的函式:
ASCII(char):回傳字串第一個字元的 ASCII 碼。例如,SELECT ASCII('A')回傳 65。CHAR(code):回傳 ASCII 碼對應的字元。例如,SELECT CHAR(65)回傳 "A"。- 範例:找出欄位以大寫字母開頭的所有列:
SELECT * FROM users WHERE ASCII(username) BETWEEN 65 AND 90; - 範例:取代字串中的不可列印字元:
SELECT REPLACE(REPLACE(text, CHAR(10), ' '), CHAR(13), ' ') FROM logs;
使用 ASCII 碼時的常見錯誤
雖然 ASCII 碼直觀,小小的錯誤仍可能導致程式錯誤或非預期行為。以下是一些常見陷阱與避開方法:
相關指南:如何檢查 JSON 格式是否正確。
把 ASCII 與 Unicode 或擴充 ASCII 搞混
- 錯誤:假設所有字元都是 ASCII。例如,把歐元符號(€)當成 ASCII 字元(它不是——它是 Unicode U+20AC)。
- 解法:用 ASCII 表 確認字元是否在 ASCII 範圍(0–127)。若你處理非 ASCII 字元,改用 Unicode(例如 UTF-8)。
- 範例:在 Python 中,
ord("€")回傳 8364,超出 ASCII 範圍。試圖把它轉成 ASCII 碼會失敗或產生不正確的結果。
搞混控制字元
- 錯誤:把相似的控制字元搞混,例如換行(LF,0x0A)與歸位(CR,0x0D)。例如,在 Windows 文字檔用 LF 而非 CR+LF,可能造成格式問題。
- 解法:查 ASCII 表核對控制字元的精確編碼。關於列結尾,請記住:
- Windows:CR(0x0D)+ LF(0x0A)。
- Unix/Linux:LF(0x0A)。
- 舊版 Mac:CR(0x0D)。
- 範例:在 Python 中,以文字模式(
"r")開啟檔案會自動依你的作業系統處理列結尾。然而在二進位模式("rb"),你必須自行處理。
範圍差一錯誤
- 錯誤:不正確地定義字元檢查的範圍。例如,用
47 <= ord(char) <= 57檢查字元是否為數字(應為 48–57)。 - 解法:用 ASCII 表再核對範圍。常見範圍包括:
- 數字:48–57。
- 大寫字母:65–90。
- 小寫字母:97–122。
- 可列印字元:32–126。
- 範例:在 JavaScript 中,下列程式不正確地檢查數字:
function isDigit(char) { let code = char.charCodeAt(0); return code >= 47 && code <= 57; // Wrong (includes '/') }正確版本是:function isDigit(char) { let code = char.charCodeAt(0); return code >= 48 && code <= 57; }
忽略大小寫差異
- 錯誤:忘了大寫與小寫字母有不同的 ASCII 碼。例如,假設
ord("A") == ord("a")(它們分別是 65 與 97)。 - 解法:用 ASCII 表確認兩種大小寫的編碼。要在大小寫之間轉換,減去或加上 32(例如
chr(ord("a") - 32)可得大寫)。 - 範例:在 Python 中,下列程式無法把小寫字母轉成大寫:
char = "a" upper_char = chr(ord(char) - 1) # Wrong (results in "`")正確版本是:char = "a" upper_char = chr(ord(char) - 32) # Correct (results in "A")
誤用十六進位或八進位前綴
- 錯誤:處理十六進位或八進位值時忘了加前綴。例如,在搜尋或轉換中把
0x41寫成41。 - 解法:一律加上前綴:
- 十六進位:
0x(例如0x41)。 - 八進位:
0(例如0101)。 - 二進位:
0b(例如0b01000001)。
- 十六進位:
- 範例:在 ASCII 表工具中,搜尋「41」(十進位)會得到與「0x41」(十六進位)不同的結果。請一律依需求使用正確前綴。
若你正在比較方案,如何在瀏覽器中移除文字開頭的 BOM 有詳細說明。
若你正在比較方案,Chmod 計算機:八進位與符號轉換工具 有詳細說明。
若你正在比較方案,如何用 CSS 做出 3x3 格線:實務逐步說明 有詳細說明。