ในงานพัฒนาส่วนหน้าประจำวันเรามักจะจัดการกับ HTML, JavaScript, CSS และภาษาอื่น ๆ เช่นภาษาจริงภาษาคอมพิวเตอร์ยังมีตัวอักษร, ไวยากรณ์, คำน้อย, วิธีการเข้ารหัส ฯลฯ ที่นี่ฉันจะพูดคุยสั้น ๆ เกี่ยวกับปัญหาการเข้ารหัสที่มักจะพบในการทำงานประจำวันของ HTML และ JavaScript
ในคอมพิวเตอร์ข้อมูลที่เราจัดเก็บจะแสดงด้วยรหัสไบนารี สิ่งที่เรารู้เกี่ยวกับการแปลงสัญลักษณ์เช่นอักขระภาษาอังกฤษและจีนที่แสดงบนหน้าจอและรหัสไบนารีที่ใช้สำหรับการจัดเก็บคือการเข้ารหัส
มีสองแนวคิดพื้นฐานที่จะอธิบายคือการเข้ารหัส Charset และการเข้ารหัสตัวละคร:
Charset ชุดอักขระนั่นคือตารางของความสัมพันธ์การทำแผนที่ระหว่างสัญลักษณ์และตัวเลขนั่นคือมันกำหนดว่า 107 คือ 'A' ของ Koubei, 21475 คือ "ปาก" ของคำปากและตารางที่แตกต่างกันมีความสัมพันธ์การทำแผนที่ที่แตกต่างกันเช่น ASCII, GB2312, Unicode ผ่านตารางการแมปของตัวเลขและอักขระเราสามารถแปลงหมายเลขที่แสดงไบนารีเป็นอักขระที่แน่นอน
การเข้ารหัส Gramter วิธีการเข้ารหัส ตัวอย่างเช่นสำหรับหมายเลข 21475 ที่ควรเป็น "พอร์ต" เราควรใช้ /U5K3E3 เพื่อเป็นตัวแทนหรือ%E5%8F%A3 เพื่อเป็นตัวแทนหรือไม่? สิ่งนี้ถูกกำหนดโดยการเข้ารหัสอักขระ
สำหรับสตริงเช่น 'cuoxin.com' พวกเขามักจะใช้ตัวละครสำหรับชาวอเมริกัน พวกเขาได้กำหนดชุดอักขระที่เรียกว่า ASCII โดยมีชื่อเต็มเป็นรหัสการแลกเปลี่ยนข้อมูลมาตรฐานอเมริกัน หมายเลข 128 0127 (ถึงพลังงานที่ 7 ของ 2, 0 × 00-0 × 7F) แสดงถึง 128 อักขระที่ใช้กันทั่วไปเช่น 123ABC มีทั้งหมด 7 บิตและอันแรกคือบิตลงชื่อซึ่งควรใช้เพื่อใช้รหัสผกผันส่วนประกอบเพื่อแสดงตัวเลขลบหรือบางสิ่งบางอย่าง มีทั้งหมด 8 บิตเพื่อสร้างไบต์ ชาวอเมริกันเป็นคนตระหนี่เล็กน้อยในตอนนั้น หากพวกเขาออกแบบไบต์ที่มี 16 บิตหรือ 32 บิตจากจุดเริ่มต้นจะมีปัญหามากมายในโลก อย่างไรก็ตามในเวลานั้นพวกเขาอาจคิดว่า 8 บิตก็เพียงพอแล้วซึ่งอาจเป็นตัวแทนของตัวละครที่แตกต่างกัน 128 ตัว!
เนื่องจากคอมพิวเตอร์ทำโดยชาวอเมริกันพวกเขาจึงบันทึกปัญหาตัวเองและเข้ารหัสสัญลักษณ์ทั้งหมดที่ใช้ซึ่งทำให้พวกเขาสะดวกสบายมากที่จะใช้ แต่เมื่อคอมพิวเตอร์เริ่มกลายเป็นสากลปัญหาเกิดขึ้น ยกตัวอย่างจีนเป็นตัวอย่าง ตัวละครจีนมีเพียงหมื่นเท่านั้น ฉันควรทำอย่างไร?
ระบบไบต์ 8 บิตที่มีอยู่นั้นเป็นพื้นฐานที่ไม่สามารถทำลายได้ไม่สามารถแก้ไขได้เป็น 16 บิตหรืออะไรบางอย่างมิฉะนั้นการเปลี่ยนแปลงจะใหญ่เกินไปดังนั้นคุณสามารถใช้เส้นทางอื่น: ใช้ตัวละคร ASCII หลายตัวเพื่อแสดงถึงตัวละครที่แตกต่างนั่นคือ MBCS (ระบบอักขระหลายไบต์
ด้วยแนวคิดของ MBCs นี้เราสามารถเป็นตัวแทนของตัวละครได้มากขึ้น ตัวอย่างเช่นหากเราใช้อักขระ ASCII 2 ตัวมี 16 บิตและในทางทฤษฎีมี 2 ตัวอักษรถึงพลัง 16 65,536 อักขระ แต่การเข้ารหัสเหล่านี้จะถูกกำหนดให้กับตัวละครได้อย่างไร? ตัวอย่างเช่นการเข้ารหัส Unicode ของ "ปาก" "ปาก" คือ 21475 ใครตัดสินใจ? ชุดอักขระซึ่งเป็นชุดที่เพิ่งเปิดตัว ASCII เป็นชุดอักขระพื้นฐานที่สุด เหนือสิ่งนี้เรามีชุดตัวละครที่คล้ายกับ GB2312 และ BIG5 สำหรับ MBCS ในภาษาจีนและจีนแบบดั้งเดิมที่เรียบง่าย ฯลฯ ในที่สุดก็มีสถาบันที่เรียกว่า Unicode Consortium ซึ่งตัดสินใจสร้างชุดตัวละคร (UCS, ชุดอักขระสากล) รวมถึงตัวละครทั้งหมดและวิธีการเข้ารหัสที่สอดคล้องกันคือ Unicode ตั้งแต่ปี 1991 ได้เปิดตัวมาตรฐาน UNICODE International ฉบับพิมพ์ครั้งแรก ISBN 0-321-18578-1 และองค์การระหว่างประเทศเพื่อมาตรฐาน ISO ได้เข้าร่วมในการปรับแต่งของสิ่งนี้ ISO/IEC 10646: ชุดตัวละครสากล ในระยะสั้น Unicode เป็นมาตรฐานตัวละครที่ครอบคลุมสัญลักษณ์ที่มีอยู่ทั้งหมดบนโลก ตอนนี้มันถูกใช้มากขึ้นเรื่อย ๆ มาตรฐาน ECMA ยังกำหนดว่าอักขระภายในของภาษา JavaScript ใช้มาตรฐาน Unicode (ซึ่งหมายความว่าชื่อตัวแปร JavaScript ชื่อฟังก์ชั่น ฯลฯ ได้รับอนุญาตในภาษาจีน!)
สำหรับนักพัฒนาในประเทศจีนพวกเขาอาจประสบปัญหามากขึ้นเช่นการแปลงระหว่าง GBK, GB2312 และ UTF-8 การพูดอย่างเคร่งครัดข้อความนี้ไม่ถูกต้องมากนัก GBK และ GB2312 เป็นชุดอักขระ (charsets) ในขณะที่ UTF-8 เป็นวิธีการเข้ารหัส (การเข้ารหัสอักขระ) ซึ่งเป็นวิธีการเข้ารหัสของชุดอักขระ UCS ในมาตรฐาน Unicode เนื่องจากหน้าเว็บที่ใช้ชุดอักขระ Unicode ส่วนใหญ่จะถูกเข้ารหัสด้วย UTF-8 คนมักจะรวมเข้าด้วยกันซึ่งไม่ถูกต้องจริง
ด้วย Unicode อย่างน้อยก่อนที่อารยธรรมมนุษย์จะพบกับมนุษย์ต่างดาวนี่เป็นคีย์หลักดังนั้นใช้มัน ตอนนี้วิธีการเข้ารหัส Unicode ที่ใช้กันอย่างแพร่หลายที่สุดคือ UTF-8 (รูปแบบการแปลง UCS/Unicode 8 บิต) ซึ่งมีหลายสิ่งที่ดีโดยเฉพาะ:
การเข้ารหัสชุดอักขระ UCS Universal Worldwide
เป็นวิธีการเข้ารหัสอักขระที่มีความยาวตัวแปรซึ่งเข้ากันได้กับ ASCII
จุดที่สองเป็นข้อได้เปรียบที่ดีซึ่งทำให้ระบบที่ใช้การเข้ารหัส ASCII บริสุทธิ์ก่อนหน้านี้เข้ากันได้ก่อนหน้านี้และไม่เพิ่มที่เก็บข้อมูลเพิ่มเติม (สมมติว่าวิธีการเข้ารหัสยาวแต่ละตัวละครประกอบด้วย 2 ไบต์จากนั้นพื้นที่เก็บข้อมูลที่ครอบครองโดยอักขระ ASCII จะเพิ่มขึ้นเป็นสองเท่าในเวลานี้)