สัญลักษณ์แคเร็ตสำหรับการระบุตัวอักษรควบคุม
สรุปใจความสำคัญ
- สัญลักษณ์แคเร็ตใช้เครื่องหมาย ^ นำหน้าตัวอักษรเพื่อแทนรหัสควบคุม 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) หรือการเลื่อนเคอร์เซอร์กลับไปต้นบรรทัด

