ASCII คืออะไร? รหัสอักขระพื้นฐานของคอมพิวเตอร์
ตัวอักษร ตัวเลข และสัญลักษณ์ที่เราพิมพ์ล้วนมีรหัสตัวเลขอยู่เบื้องหลัง ASCII คือจุดเริ่มต้นสำคัญที่ทำให้คอมพิวเตอร์มีภาษากลางสำหรับจัดเก็บและส่งข้อความ
สารบัญ
ASCII คืออะไร?
ASCII ย่อมาจาก American Standard Code for Information Interchange เป็นมาตรฐานการเข้ารหัสอักขระที่กำหนด รหัสตัวเลข 0 ถึง 127 ให้กับตัวอักษร ตัวเลข เครื่องหมายวรรคตอน และอักขระควบคุมที่ใช้กับข้อความภาษาอังกฤษ
ตัวอย่างเช่น ตัวอักษรพิมพ์ใหญ่ A มีรหัสเป็น 65, ตัวเลข 0 มีรหัสเป็น 48, และช่องว่างมีรหัสเป็น 32 การแมปแบบนี้ทำให้คอมพิวเตอร์เก็บและส่งข้อความเป็นชุดตัวเลขได้
ASCII ใช้ 7 บิต ต่ออักขระ จึงมีค่าที่เป็นไปได้ทั้งหมด 128 ค่า ครอบคลุมตัวอักษรอังกฤษพิมพ์ใหญ่และพิมพ์เล็ก ตัวเลข 0-9 เครื่องหมายทั่วไป และคำสั่งควบคุมบางส่วน
ประวัติย่อของ ASCII
ASCII ถูกพัฒนาในช่วงต้นทศวรรษ 1960 โดยคณะกรรมการของ American Standards Association ซึ่งปัจจุบันคือ ANSI มาตรฐานนี้เผยแพร่ครั้งแรกในปี 1963 และปรับปรุงครั้งล่าสุดในปี 1986 ในชื่อ ANSI X3.4-1986
ก่อนมี ASCII ระบบคอมพิวเตอร์และระบบสื่อสารจำนวนมากใช้รหัสอักขระที่เข้ากันไม่ได้ เช่น ระบบ IBM ใช้ EBCDIC ส่วนระบบโทรเลขใช้ Baudot code ทำให้การแลกเปลี่ยนข้อความระหว่างเครื่องทำได้ยาก
ASCII ช่วยสร้างภาษากลางสำหรับคอมพิวเตอร์ เทอร์มินัล เครื่องพิมพ์ และเครือข่าย อักขระควบคุมหลายตัว เช่น carriage return และ line feed มาจากเครื่อง teletype และอุปกรณ์กลไกในยุคนั้นโดยตรง
ASCII ทำงานอย่างไร
ASCII จับคู่อักขระแต่ละตัวกับเลขฐานสองขนาด 7 บิต คอมพิวเตอร์ยุคใหม่มักเก็บค่าเหล่านี้ในไบต์ 8 บิต โดยบิตที่เหลือมักเป็น 0 หรือเคยใช้สำหรับตรวจสอบ parity ในระบบเก่า
Character -> Decimal -> Binary
'A' -> 65 -> 01000001
'B' -> 66 -> 01000010
'a' -> 97 -> 01100001
'0' -> 48 -> 00110000
' ' -> 32 -> 00100000
'!' -> 33 -> 00100001
The word "Hi" is stored as:
H = 72, i = 105
Binary: 01001000 01101001รูปแบบบางอย่างใน ASCII ทำให้จดจำและใช้งานได้ง่าย:
- ตัวอักษรพิมพ์ใหญ่ A-Z ใช้รหัส 65-90
- ตัวอักษรพิมพ์เล็ก a-z ใช้รหัส 97-122
- ผลต่างระหว่างตัวพิมพ์ใหญ่กับตัวพิมพ์เล็กคือ 32 เสมอ ซึ่งเป็นความต่างระดับบิตที่มีประโยชน์มาก
- ตัวเลข 0-9 ใช้รหัส 48-57 ดังนั้นค่าตัวเลขจริงคือรหัส ASCII ลบด้วย 48
ตาราง ASCII
นี่คือตารางอักขระ ASCII ที่พิมพ์ได้ ค่าแรกคือ 32 ซึ่งเป็นช่องว่าง และค่าสุดท้ายคือ 126 หรือเครื่องหมาย tilde
| รหัส | อักขระ | รหัส | อักขระ | รหัส | อักขระ |
|---|---|---|---|---|---|
| 32 | Space | 48 | 0 | 64 | @ |
| 33 | ! | 49 | 1 | 65 | A |
| 34 | " | 50 | 2 | 66 | B |
| 35 | # | 51 | 3 | 67 | C |
| 36 | $ | 52 | 4 | 68 | D |
| 37 | % | 53 | 5 | 69 | E |
| 38 | & | 54 | 6 | 70 | F |
| 39 | ' | 55 | 7 | 71 | G |
| 40 | ( | 56 | 8 | 72 | H |
| 41 | ) | 57 | 9 | 73 | I |
| 42 | * | 58 | : | 74 | J |
| 43 | + | 59 | ; | 75 | K |
| 44 | , | 60 | < | 76 | L |
| 45 | - | 61 | = | 77 | M |
| 46 | . | 62 | > | 78 | N |
| 47 | / | 63 | ? | 79 | O |
| 80 | P | 96 | ` | 112 | p |
| 81 | Q | 97 | a | 113 | q |
| 82 | R | 98 | b | 114 | r |
| 83 | S | 99 | c | 115 | s |
| 84 | T | 100 | d | 116 | t |
| 85 | U | 101 | e | 117 | u |
| 86 | V | 102 | f | 118 | v |
| 87 | W | 103 | g | 119 | w |
| 88 | X | 104 | h | 120 | x |
| 89 | Y | 105 | i | 121 | y |
| 90 | Z | 106 | j | 122 | z |
| 91 | [ | 107 | k | 123 | { |
| 92 | \ | 108 | l | 124 | | |
| 93 | ] | 109 | m | 125 | } |
| 94 | ^ | 110 | n | 126 | ~ |
Control Characters (0-31)
รหัส ASCII 32 ค่าแรกเป็น control characters ไม่ได้แทนสัญลักษณ์ที่มองเห็นได้ แต่เป็นคำสั่งสำหรับเทอร์มินัล เครื่องพิมพ์ โมเด็ม และ teletype ในอดีต บางตัวยังเจอได้ทุกวัน:
| รหัส | ชื่อ | ตัวย่อ | การใช้งาน |
|---|---|---|---|
| 0 | Null | NUL | ตัวจบสตริงในภาษา C/C++ |
| 9 | Horizontal Tab | HT | อักขระแท็บ (\t) |
| 10 | Line Feed | LF | ขึ้นบรรทัดใหม่บน Unix/Linux/macOS (\n) |
| 13 | Carriage Return | CR | ใช้คู่กับ LF บน Windows (\r\n) |
| 27 | Escape | ESC | ลำดับ escape ในเทอร์มินัล เช่น สีและตำแหน่งเคอร์เซอร์ |
| 127 | Delete | DEL | เดิมใช้ลบอักขระบน punched tape |
ความต่างของ line ending ระหว่างระบบปฏิบัติการ เช่น \n บนระบบแบบ Unix และ \r\n บน Windows เป็นมรดกโดยตรงจาก control characters ของ ASCII
Printable Characters (32-126)
อักขระ ASCII ที่พิมพ์ได้ 95 ตัวถูกแบ่งเป็นช่วงที่เข้าใจง่าย:
| ช่วง | รหัส | คำอธิบาย |
|---|---|---|
| Space | 32 | อักขระช่องว่าง |
| Punctuation/Symbols | 33-47, 58-64, 91-96, 123-126 | ! " # $ % & ' ( ) * + , - . / : ; และสัญลักษณ์อื่น ๆ |
| Digits | 48-57 | 0 1 2 3 4 5 6 7 8 9 |
| Uppercase Letters | 65-90 | A B C D E F ... Z |
| Lowercase Letters | 97-122 | a b c d e f ... z |
การใช้ ASCII ในโค้ด
ภาษาโปรแกรมส่วนใหญ่มีวิธีแปลงระหว่างอักขระกับรหัส ASCII ได้โดยตรง:
JavaScript
// Character to ASCII code
"A".charCodeAt(0); // 65
"a".charCodeAt(0); // 97
" ".charCodeAt(0); // 32
// ASCII code to character
String.fromCharCode(65); // "A"
String.fromCharCode(72, 101, 108, 108, 111); // "Hello"
// Convert case using ASCII math
const lower = String.fromCharCode("A".charCodeAt(0) + 32); // "a"
const upper = String.fromCharCode("a".charCodeAt(0) - 32); // "A"Python
# Character to ASCII code
ord('A') # 65
ord('a') # 97
# ASCII code to character
chr(65) # 'A'
chr(97) # 'a'
# Convert a string to ASCII codes
[ord(c) for c in "Hello"] # [72, 101, 108, 108, 111]เทคนิคที่ใช้ได้จริง
// Check if a character is a digit
const isDigit = (c) => c.charCodeAt(0) >= 48 && c.charCodeAt(0) <= 57;
// Check if a character is a letter
const isLetter = (c) => {
const code = c.charCodeAt(0);
return (code >= 65 && code <= 90) || (code >= 97 && code <= 122);
};
// Get alphabet position (A=1, B=2, ...)
const position = "C".charCodeAt(0) - 64; // 3ASCII เทียบกับ Unicode
ASCII รองรับเพียง 128 อักขระ ซึ่งพอสำหรับข้อความภาษาอังกฤษพื้นฐาน แต่ไม่เพียงพอสำหรับภาษาทั่วโลก Unicode จึงถูกสร้างขึ้นเพื่อรองรับตัวเขียน สัญลักษณ์ และอีโมจิหลากหลายแบบ:
| คุณสมบัติ | ASCII | Unicode (UTF-8) |
|---|---|---|
| จำนวนอักขระ | 128 | มากกว่า 149,000 |
| ภาษา | ภาษาอังกฤษเป็นหลัก | รองรับระบบตัวเขียนสมัยใหม่แทบทั้งหมด |
| บิตต่ออักขระ | 7 (มักเก็บเป็น 8) | 8-32 แบบความยาวแปรผัน |
| รองรับอีโมจิ | ไม่รองรับ | รองรับ |
| เข้ากันย้อนหลัง | - | ได้ เพราะ 128 code points แรกตรงกับ ASCII |
แนวคิดสำคัญคือ UTF-8 เป็น superset ของ ASCII ข้อความ ASCII ที่ถูกต้องจึงเป็น UTF-8 ที่ถูกต้องด้วย นี่คือเหตุผลที่ ASCII ยังมีความสำคัญแม้โลกปัจจุบันจะใช้ Unicode เป็นหลัก
ทุกวันนี้ ASCII ยังใช้ที่ไหนบ้าง
แม้ ASCII จะมีอายุมากกว่า 60 ปี แต่ยังถูกใช้ในหลายพื้นที่:
- ภาษาโปรแกรม - ชื่อตัวแปร keyword operator และ syntax ส่วนใหญ่ยังเป็นอักขระ ASCII
- โปรโตคอลเครือข่าย - HTTP headers, SMTP commands, FTP และโปรโตคอลเก่าจำนวนมากอิงกับ ASCII
- รูปแบบไฟล์ - CSV, JSON, HTML, XML, Markdown และ INI ล้วนสร้างบนข้อความที่เข้ากันกับ ASCII
- URL - ชื่อโดเมนและส่วนประกอบจำนวนมากของ URL เริ่มจาก ASCII ส่วนอักขระอื่นมักต้องเข้ารหัส
- เทอร์มินัลและ command line - คำสั่ง shell, environment variables และ path จำนวนมากอิงกับข้อความแบบ ASCII-compatible
- Embedded systems - อุปกรณ์ขนาดเล็กนิยมใช้ ASCII เพราะเรียบง่าย กะทัดรัด และคาดเดาได้
- ASCII art - การสร้างภาพ แผนภาพ หรือกล่องข้อความจากตัวอักษรยังพบได้ในเอกสาร logs และวัฒนธรรมคอมพิวเตอร์ย้อนยุค
คำถามที่พบบ่อย
ASCII แยกตัวพิมพ์ใหญ่และพิมพ์เล็กไหม?
แยก ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีรหัสคนละค่า เช่น "A" คือ 65 และ "a" คือ 97 โดยมีผลต่างเท่ากับ 32 เสมอ
Extended ASCII คืออะไร?
Extended ASCII มักหมายถึงการใช้ไบต์ 8 บิตเต็มช่วง คือรหัส 128-255 เพื่อเพิ่มสัญลักษณ์พิเศษ แต่ไม่มี extended ASCII แบบเดียวที่เป็นสากล เพราะ Latin-1, Windows-1252 และ encoding อื่นใช้ช่วงนี้ต่างกัน
ทำไม ASCII ถึงมี control characters?
เพราะ ASCII ถูกออกแบบให้ใช้กับฮาร์ดแวร์ เช่น teletype เครื่องพิมพ์ และโมเด็ม เช่น BEL ใช้สั่นกระดิ่ง, CR ใช้เลื่อนหัวพิมพ์กลับต้นบรรทัด และ LF ใช้เลื่อนกระดาษ หลายตัวเลิกใช้แล้ว แต่ TAB, LF, CR และ ESC ยังใช้อยู่ทุกวัน
ASCII แทนอีโมจิหรือภาษาที่ไม่ใช่อังกฤษได้ไหม?
ไม่ได้ ASCII มีเพียง 128 อักขระสำหรับข้อความอังกฤษพื้นฐาน หากต้องใช้ภาษาไทย จีน อาหรับ อีโมจิ หรือข้อความสมัยใหม่ส่วนใหญ่ ต้องใช้ Unicode โดยมักเข้ารหัสเป็น UTF-8
แปลงข้อความเป็นรหัส ASCII
ใช้เครื่องมือ ASCII Converter ฟรีของเราเพื่อแปลงข้อความเป็นรหัส ASCII หรือถอดรหัสค่า ASCII กลับเป็นข้อความได้ทันทีในเบราว์เซอร์
ลองใช้ ASCII Converterแหล่งอ้างอิง
- ANSI. (1986). ANSI X3.4-1986 - Coded Character Sets - 7-Bit American National Standard Code for Information Interchange. https://www.ansi.org
- Cerf, V. (1969). ASCII format for Network Interchange. RFC 20, IETF. https://datatracker.ietf.org/doc/html/rfc20
- Mozilla Developer Network. String.prototype.charCodeAt() - JavaScript. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
- The Unicode Consortium. The Unicode Standard. https://www.unicode.org/standard/standard.html
- Wikipedia. ASCII - History and Development. https://en.wikipedia.org/wiki/ASCII