← กลับไปยังบทความทั้งหมด

สัญลักษณ์แคเร็ตสำหรับการระบุตัวอักษรควบคุม

สรุปใจความสำคัญ

  • สัญลักษณ์แคเร็ตใช้เครื่องหมาย ^ นำหน้าตัวอักษรเพื่อแทนรหัสควบคุม ASCII ที่พิมพ์ไม่ได้
  • รหัสควบคุม 1-26 ถูกแทนด้วย ^A ถึง ^Z ตามลำดับ
  • มีต้นกำเนิดมาจากเครื่อง PDP-6 ของบริษัท DEC ในปี 1964
  • ใช้กันอย่างแพร่หลายในระบบ Unix และโปรแกรมจำลองเทอร์มินัล

สัญลักษณ์แคเร็ต (Caret Notation) คือระบบการเขียนสัญลักษณ์เพื่อระบุตัวอักษรควบคุม (Control Characters) ในมาตรฐาน ASCII โดยการใช้เครื่องหมายแคเร็ต (^) นำหน้าตัวอักษร เพื่อให้สามารถแสดงผลหรือสื่อสารรหัสควบคุมที่ไม่สามารถพิมพ์ออกมาเป็นตัวอักษรปกติได้บนหน้าจอหรือในเอกสาร

หลักการทำงานของสัญลักษณ์แคเร็ต

การกำหนดสัญลักษณ์แคเร็ตจะใช้เครื่องหมาย ^ ตามด้วยตัวอักษรหนึ่งตัว (โดยปกติจะเป็นตัวพิมพ์ใหญ่) โดยรหัส ASCII ของตัวอักษรที่ตามหลังเครื่องหมายแคเร็ตจะมีค่าเท่ากับรหัสควบคุมนั้นๆ เมื่อทำการกลับบิต (Reverse bit) ในตำแหน่ง 0x40

วิธีที่ง่ายที่สุดในการทำความเข้าใจคือ รหัสควบคุมลำดับที่ 1 ถึง 26 จะถูกแทนด้วย ^A ถึง ^Z ตามลำดับ ส่วนตัวอักษรควบคุมที่อยู่นอกช่วงตัวอักษรภาษาอังกฤษ A-Z จะใช้สัญลักษณ์ ASCII ที่อยู่ติดกันแทน ดังนี้:

  • รหัส 0 (NUL) แทนด้วย ^@
  • รหัส 27 (ESC) แทนด้วย ^[
  • รหัส 28 (FS) แทนด้วย ^\
  • รหัส 29 (GS) แทนด้วย ^]
  • รหัส 30 (RS) แทนด้วย ^^
  • รหัส 31 (US) แทนด้วย ^_
  • รหัส 127 (DEL) แทนด้วย ^?

ตัวอย่างการใช้งานที่เห็นได้ชัดคือ ^M^J ซึ่งใช้แทนคู่รหัส Carriage Return (CR) และ Line Feed (LF) ในระบบปฏิบัติการ Windows หรือการระบุลำดับการควบคุม (Escape Sequence) ของ ANSI เช่น ^[[3J เพื่อล้างหน้าจอ

ประวัติและความเป็นมา

ธรรมเนียมการใช้สัญลักษณ์แคเร็ตมีมาตั้งแต่ปี ค.ศ. 1964 โดยเริ่มจากเครื่องคอมพิวเตอร์ PDP-6 ของบริษัท Digital Equipment Corporation (DEC) ซึ่งในคู่มือการใช้งานระบุการกด Control+C เป็น ↑C (ลูกศรชี้ขึ้นขนาดเล็ก) ต่อมาเมื่อมีการเปลี่ยนมาตรฐาน ASCII จากปี 1961 เป็น 1968 ลูกศรชี้ขึ้นจึงถูกเปลี่ยนเป็นเครื่องหมายแคเร็ต (^) แทน

ระบบปฏิบัติการของเครื่อง PDP-10 และ PDP-11 รวมถึงระบบปฏิบัติการในยุคแรกของ Unix ได้นำแนวคิดนี้มาใช้ แม้ว่าในระยะแรก Unix จะไม่ได้ใช้สัญลักษณ์แคเร็ตในการแสดงผลตัวอักษรควบคุม แต่คำสั่ง stty สามารถรับค่าในรูปแบบแคเร็ตได้ ต่อมาในเวอร์ชัน 4BSD ได้มีการเพิ่มโหมด ctlecho (ซึ่งในระบบ Unix-like สมัยใหม่ใช้ชื่อว่า echoctl) เพื่อให้แสดงผลตัวอักษรควบคุมในรูปแบบแคเร็ตขณะที่ผู้ใช้พิมพ์

การใช้งานในซอฟต์แวร์และฮาร์ดแวร์

สัญลักษณ์แคเร็ตถูกนำมาใช้ในโปรแกรมจำนวนมาก โดยเฉพาะในระบบ Unix เพื่อแสดงผลตัวอักษรควบคุมในหน้าจอแสดงผล (Output) เช่น การใช้คำสั่ง more หรือ less เพื่อดูเนื้อหาไฟล์ที่มีรหัสควบคุมปนอยู่

ในด้านการป้อนข้อมูล เทอร์มินัล (Terminal) และโปรแกรมจำลองเทอร์มินัลส่วนใหญ่ยอมรับการป้อนตัวอักษรควบคุมโดยการกดปุ่ม Ctrl ค้างไว้แล้วตามด้วยตัวอักษรตามสัญลักษณ์แคเร็ต เช่น การกด Ctrl+X เพื่อสั่งตัดข้อความ (Cut) แม้ว่าในซอฟต์แวร์สมัยใหม่บางตัว ปุ่มลัดเหล่านี้อาจไม่ได้ส่งรหัสควบคุม ASCII จริงๆ ไปยังระบบ แต่ยังคงใช้รูปแบบการเรียกชื่อตามธรรมเนียมของสัญลักษณ์แคเร็ต

ข้อจำกัดและผลกระทบต่อการออกแบบ

ความสัมพันธ์ระหว่างปุ่ม Ctrl และรหัส ASCII ส่งผลต่อการออกแบบปุ่มลัดในซอฟต์แวร์ปัจจุบัน ตัวอย่างเช่น การที่ปุ่ม Ctrl+H มีรหัสเดียวกับปุ่ม Backspace ทำให้ผู้พัฒนาซอฟต์แวร์มักหลีกเลี่ยงการใช้ Ctrl+H สำหรับคำสั่ง "ช่วยเหลือ" (Help) และหันไปใช้ปุ่มลัดอื่นแทน

ระบบสัญลักษณ์ทางเลือก

ในระบบปฏิบัติการของ Acorn Computers เช่น Acorn Atom, BBC Micro และ RISC OS ได้มีการใช้สัญลักษณ์เส้นตั้ง (Vertical Bar |) แทนเครื่องหมายแคเร็ต เช่น |M จะหมายถึงตัวอักษร Carriage Return (ASCII 13) และใช้ |! เพื่อเพิ่มค่ารหัส 128 ให้กับตัวอักษรที่ตามหลัง เพื่อรองรับรหัสที่สูงกว่า 7 บิต

คำถามที่พบบ่อย

สัญลักษณ์แคเร็ต (Caret Notation) คืออะไร?

คือระบบการเขียนแทนตัวอักษรควบคุม (Control Characters) ในมาตรฐาน ASCII โดยใช้เครื่องหมาย ^ ตามด้วยตัวอักษร เพื่อให้สามารถระบุรหัสที่ปกติไม่สามารถแสดงผลเป็นตัวอักษรได้

ทำไม Ctrl+H ถึงไม่ค่อยถูกใช้เป็นปุ่มลัดสำหรับ Help ในโปรแกรมสมัยก่อน?

เพราะในมาตรฐาน ASCII รหัสของ Ctrl+H มีค่าเท่ากับรหัสของปุ่ม Backspace ทำให้หากกำหนดให้เป็นปุ่ม Help จะเกิดความสับสนกับการลบตัวอักษร

สัญลักษณ์แคเร็ตใช้แทนรหัสควบคุมที่มากกว่า 7 บิตได้หรือไม่?

ไม่ได้ สัญลักษณ์แคเร็ตออกแบบมาสำหรับรหัสควบคุม 7 บิต (0-127) สำหรับรหัสที่สูงกว่านั้น บางโปรแกรมจะใช้รูปแบบ backslash และเลขฐานแปด (เช่น \200) แทน

สัญลักษณ์ ^M หมายถึงอะไรในทางคอมพิวเตอร์?

ในสัญลักษณ์แคเร็ต ^M แทนรหัส ASCII 13 ซึ่งคือ Carriage Return (CR) หรือการเลื่อนเคอร์เซอร์กลับไปต้นบรรทัด