/อ่าน 8 นาที

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

รหัสอักขระรหัสอักขระรหัสอักขระ
32Space48064@
33!49165A
34"50266B
35#51367C
36$52468D
37%53569E
38&54670F
39'55771G
40(56872H
41)57973I
42*58:74J
43+59;75K
44,60<76L
45-61=77M
46.62>78N
47/63?79O
80P96`112p
81Q97a113q
82R98b114r
83S99c115s
84T100d116t
85U101e117u
86V102f118v
87W103g119w
88X104h120x
89Y105i121y
90Z106j122z
91[107k123{
92\108l124|
93]109m125}
94^110n126~

Control Characters (0-31)

รหัส ASCII 32 ค่าแรกเป็น control characters ไม่ได้แทนสัญลักษณ์ที่มองเห็นได้ แต่เป็นคำสั่งสำหรับเทอร์มินัล เครื่องพิมพ์ โมเด็ม และ teletype ในอดีต บางตัวยังเจอได้ทุกวัน:

รหัสชื่อตัวย่อการใช้งาน
0NullNULตัวจบสตริงในภาษา C/C++
9Horizontal TabHTอักขระแท็บ (\t)
10Line FeedLFขึ้นบรรทัดใหม่บน Unix/Linux/macOS (\n)
13Carriage ReturnCRใช้คู่กับ LF บน Windows (\r\n)
27EscapeESCลำดับ escape ในเทอร์มินัล เช่น สีและตำแหน่งเคอร์เซอร์
127DeleteDELเดิมใช้ลบอักขระบน punched tape

ความต่างของ line ending ระหว่างระบบปฏิบัติการ เช่น \n บนระบบแบบ Unix และ \r\n บน Windows เป็นมรดกโดยตรงจาก control characters ของ ASCII

Printable Characters (32-126)

อักขระ ASCII ที่พิมพ์ได้ 95 ตัวถูกแบ่งเป็นช่วงที่เข้าใจง่าย:

ช่วงรหัสคำอธิบาย
Space32อักขระช่องว่าง
Punctuation/Symbols33-47, 58-64, 91-96, 123-126! " # $ % & ' ( ) * + , - . / : ; และสัญลักษณ์อื่น ๆ
Digits48-570 1 2 3 4 5 6 7 8 9
Uppercase Letters65-90A B C D E F ... Z
Lowercase Letters97-122a 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;  // 3

ASCII เทียบกับ Unicode

ASCII รองรับเพียง 128 อักขระ ซึ่งพอสำหรับข้อความภาษาอังกฤษพื้นฐาน แต่ไม่เพียงพอสำหรับภาษาทั่วโลก Unicode จึงถูกสร้างขึ้นเพื่อรองรับตัวเขียน สัญลักษณ์ และอีโมจิหลากหลายแบบ:

คุณสมบัติASCIIUnicode (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

แหล่งอ้างอิง

  1. ANSI. (1986). ANSI X3.4-1986 - Coded Character Sets - 7-Bit American National Standard Code for Information Interchange. https://www.ansi.org
  2. Cerf, V. (1969). ASCII format for Network Interchange. RFC 20, IETF. https://datatracker.ietf.org/doc/html/rfc20
  3. Mozilla Developer Network. String.prototype.charCodeAt() - JavaScript. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
  4. The Unicode Consortium. The Unicode Standard. https://www.unicode.org/standard/standard.html
  5. Wikipedia. ASCII - History and Development. https://en.wikipedia.org/wiki/ASCII
USTHJP