โฮมเพจ » ทำอย่างไร » เหตุใดอักขระภาษาอังกฤษจึงจำเป็นต้องมีจำนวนไบต์น้อยกว่าเพื่อเป็นตัวแทนพวกมันมากกว่าอักขระในตัวอักษรอื่น

    เหตุใดอักขระภาษาอังกฤษจึงจำเป็นต้องมีจำนวนไบต์น้อยกว่าเพื่อเป็นตัวแทนพวกมันมากกว่าอักขระในตัวอักษรอื่น

    ในขณะที่เราส่วนใหญ่ไม่เคยหยุดคิดเกี่ยวกับมัน แต่ตัวอักษรตัวอักษรไม่ได้มีขนาดเท่ากันทั้งหมดในจำนวนไบต์ที่ใช้ในการเป็นตัวแทนของพวกเขา แต่ทำไมล่ะ โพสต์ SuperUser ถาม & ตอบมีคำตอบสำหรับคำถามของผู้อ่านอยากรู้อยากเห็น.

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    ASCII Chart สกรีนช็อตบางส่วนความอนุเคราะห์จาก Wikipedia.

    คำถาม

    SuperUser reader khajvah ต้องการทราบว่าทำไมตัวอักษรที่แตกต่างกันจึงใช้พื้นที่ดิสก์ต่างกันเมื่อบันทึก:

    เมื่อฉันใส่ 'a' ในไฟล์ข้อความและบันทึกมันทำให้มีขนาด 2 ไบต์ แต่เมื่อฉันใส่ตัวอักษรเช่น 'ա' (ตัวอักษรจากตัวอักษรอาร์เมเนีย) มันทำให้มีขนาด 3 ไบต์.

    ความแตกต่างระหว่างตัวอักษรบนคอมพิวเตอร์คืออะไร? ทำไมภาษาอังกฤษใช้พื้นที่น้อยลงเมื่อบันทึก?

    ตัวอักษรเป็นตัวอักษรใช่มั้ย อาจจะไม่! คำตอบของปริศนาตัวอักษรนี้คืออะไร?

    คำตอบ

    ผู้สนับสนุน SuperUser Doktoro Reichard และ ernie มีคำตอบสำหรับเรา ก่อนอื่น Doktoro Reichard:

    หนึ่งในรูปแบบการเข้ารหัสแรกที่ได้รับการพัฒนาเพื่อใช้ในคอมพิวเตอร์กระแสหลักคือ ASCII (รหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูล) มาตรฐาน มันได้รับการพัฒนาในปี 1960 ในประเทศสหรัฐอเมริกา.

    ตัวอักษรภาษาอังกฤษใช้ส่วนหนึ่งของตัวอักษรละติน (เช่นมีคำที่เน้นเสียงภาษาอังกฤษอยู่เล็กน้อย) ในจดหมายนั้นมี 26 ตัวอักษรแต่ละตัวไม่พิจารณาตัวพิมพ์ และก็จะต้องมีหมายเลขบุคคลและเครื่องหมายวรรคตอนในรูปแบบใด ๆ ที่อ้างว่าเข้ารหัสตัวอักษรภาษาอังกฤษ.

    ช่วงทศวรรษ 1960 เป็นช่วงเวลาที่คอมพิวเตอร์ไม่มีหน่วยความจำหรือพื้นที่ดิสก์ที่เรามีอยู่ตอนนี้ ASCII ได้รับการพัฒนาให้เป็นตัวแทนมาตรฐานของตัวอักษรที่ใช้งานได้ในคอมพิวเตอร์ทุกเครื่องในสหรัฐอเมริกา ในขณะนั้นการตัดสินใจที่จะทำให้ตัวอักษร ASCII ทุกตัวมีความยาว 8 บิต (1 ไบต์) เนื่องจากรายละเอียดทางเทคนิคของเวลา (บทความ Wikipedia กล่าวถึงความจริงที่ว่าเทปพรุนมีตำแหน่ง 8 บิตในแต่ละครั้ง) ในความเป็นจริงชุดรูปแบบ ASCII ดั้งเดิมสามารถส่งโดยใช้ 7 บิตและแปดสามารถใช้สำหรับการตรวจสอบพาริตี การพัฒนาภายหลังได้ขยายรูปแบบ ASCII ดั้งเดิมเพื่อรวมอักขระที่เน้นเสียงคณิตศาสตร์และเทอร์มินัลจำนวนมาก.

    ด้วยการเพิ่มขึ้นของการใช้คอมพิวเตอร์เมื่อเร็ว ๆ นี้ทั่วโลกทำให้ผู้คนจากภาษาต่าง ๆ จำนวนมากขึ้นสามารถเข้าถึงคอมพิวเตอร์ได้ นั่นหมายความว่าสำหรับแต่ละภาษาต้องมีการพัฒนารูปแบบการเข้ารหัสใหม่โดยไม่ขึ้นกับรูปแบบอื่น ๆ ซึ่งจะขัดแย้งกันถ้าอ่านจากเทอร์มินัลภาษาที่แตกต่างกัน.

    Unicode เข้ามาเป็นวิธีแก้ปัญหาการมีอยู่ของเทอร์มินัลต่าง ๆ โดยการรวมอักขระที่มีความหมายที่เป็นไปได้ทั้งหมดไว้ในชุดอักขระนามธรรมเดียว.

    UTF-8 เป็นวิธีหนึ่งในการเข้ารหัสชุดอักขระ Unicode เป็นการเข้ารหัสความกว้างแปรผัน (เช่นอักขระที่แตกต่างกันสามารถมีขนาดแตกต่างกันได้) และได้รับการออกแบบมาเพื่อรองรับความเข้ากันได้ย้อนหลังกับชุดรูปแบบ ASCII เดิม ดังนั้นชุดอักขระ ASCII จะยังคงมีขนาดหนึ่งไบต์ในขณะที่อักขระอื่น ๆ มีขนาดตั้งแต่สองไบต์ขึ้นไป UTF-16 เป็นอีกวิธีในการเข้ารหัสชุดอักขระ Unicode เมื่อเปรียบเทียบกับ UTF-8 อักขระจะถูกเข้ารหัสเป็นชุดของหน่วยรหัส 16 บิตหนึ่งหรือสองชุด.

    ตามที่ระบุไว้ในความคิดเห็นอื่นอักขระ 'a' จะใช้งานหนึ่งไบต์ในขณะที่ 'ա' ใช้สองไบต์แสดงถึงการเข้ารหัส UTF-8 ไบต์พิเศษในคำถามเดิมเกิดจากการมีอักขระขึ้นบรรทัดใหม่ในตอนท้าย.

    ตามด้วยคำตอบจากเออร์นี่:

    1 ไบต์คือ 8 บิตและสามารถแทนค่าต่างกันสูงสุด 256 (2 ^ 8).

    สำหรับภาษาที่ต้องการความเป็นไปได้มากกว่านี้การแมปแบบ 1 ต่อ 1 ไม่สามารถทำได้ดังนั้นจึงจำเป็นต้องมีข้อมูลเพิ่มเติมเพื่อเก็บอักขระ.

    โปรดทราบว่าโดยทั่วไปการเข้ารหัสส่วนใหญ่ใช้ 7 บิตแรก (128 ค่า) สำหรับอักขระ ASCII นั่นทำให้บิตที่ 8 หรือ 128 มีค่ามากขึ้นสำหรับอักขระเพิ่มเติม เพิ่มอักขระที่เน้นเสียงภาษาเอเชียซิริลลิก ฯลฯ และคุณสามารถเห็นได้อย่างง่ายดายว่าทำไม 1 ไบต์ไม่เพียงพอสำหรับการถืออักขระทั้งหมด.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.