JavaRush /จาวาบล็อก /Random-TH /การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) แล...
articles
ระดับ

การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์

เผยแพร่ในกลุ่ม
วันนี้เราจะพูดถึงที่มาของ krakozyabrs บนเว็บไซต์และในโปรแกรม มีการเข้ารหัสข้อความใดบ้าง และควรใช้อันใด เรามาดูรายละเอียดประวัติการพัฒนากันดีกว่า โดยเริ่มจาก ASCII พื้นฐาน รวมถึงเวอร์ชันขยาย CP866, KOI8-R, Windows 1251 และลงท้ายด้วยการเข้ารหัสกลุ่ม Unicode สมัยใหม่ UTF 16 และ 8 การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์ - 1สารบัญ: สำหรับบางคน ข้อมูลนี้อาจดูเหมือนไม่จำเป็น แต่คุณรู้ไหมว่ามีคำถามกี่ข้อที่ฉันได้รับโดยเฉพาะเกี่ยวกับการรวบรวมข้อมูล krakozyabrs (ชุดอักขระที่อ่านไม่ได้) ตอนนี้ฉันจะมีโอกาสแนะนำทุกคนเกี่ยวกับเนื้อหาของบทความนี้และค้นหาข้อผิดพลาดของตัวเอง ก็เตรียมซึมซับข้อมูลและลองติดตามความลื่นไหลของเรื่องได้เลย

ASCII - การเข้ารหัสข้อความพื้นฐานสำหรับตัวอักษรละติน

การพัฒนาการเข้ารหัสข้อความเกิดขึ้นพร้อมกันกับการก่อตัวของอุตสาหกรรมไอทีและในช่วงเวลานี้พวกเขาสามารถเผชิญกับการเปลี่ยนแปลงได้ค่อนข้างมาก ในอดีต ทุกอย่างเริ่มต้นด้วย EBCDIC ซึ่งค่อนข้างไม่สอดคล้องกันในการออกเสียงภาษารัสเซีย ซึ่งทำให้สามารถเข้ารหัสตัวอักษรของตัวอักษรละติน เลขอารบิค และเครื่องหมายวรรคตอนด้วยอักขระควบคุมได้ แต่ถึงกระนั้นจุดเริ่มต้นสำหรับการพัฒนาการเข้ารหัสข้อความสมัยใหม่ควรถือเป็นASCII ที่มีชื่อเสียง (รหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูลซึ่งในภาษารัสเซียมักออกเสียงว่า "ถาม") โดยอธิบายอักขระ 128 ตัวแรกที่ใช้บ่อยที่สุดโดยผู้ใช้ที่พูดภาษาอังกฤษ ได้แก่ ตัวอักษรละติน เลขอารบิก และเครื่องหมายวรรคตอน อักขระ 128 ตัวที่อธิบายไว้ใน ASCII ยังมีอักขระบริการบางตัว เช่น วงเล็บเหลี่ยม เครื่องหมายแฮช เครื่องหมายดอกจัน เป็นต้น ในความเป็นจริงคุณสามารถเห็นได้ด้วยตัวเอง: การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์ - 2มันคืออักขระ 128 ตัวจาก ASCII เวอร์ชันดั้งเดิมที่กลายเป็นมาตรฐานและในการเข้ารหัสอื่น ๆ คุณจะพบพวกมันอย่างแน่นอนและพวกมันจะปรากฏตามลำดับนี้ แต่ความจริงก็คือด้วยความช่วยเหลือของข้อมูลหนึ่งไบต์คุณสามารถเข้ารหัสได้ไม่ใช่ 128 แต่มากถึง 256 ค่าที่แตกต่างกัน (สองยกกำลังแปดเท่ากับ 256) ดังนั้นหลังจาก Asuka เวอร์ชันพื้นฐานทั้งหมด ชุดของการเข้ารหัส ASCII แบบขยาย ปรากฏขึ้น ซึ่งเป็นไปได้ นอกเหนือจากอักขระพื้นฐาน 128 ตัวแล้ว ยังสามารถเข้ารหัสโดยใช้อักขระการเข้ารหัสประจำชาติ (เช่น รัสเซีย) ในที่นี้ อาจคุ้มค่าที่จะอธิบายเพิ่มเติมอีกเล็กน้อยเกี่ยวกับระบบตัวเลขที่ใช้ในคำอธิบาย ประการแรก อย่างที่คุณทราบกันดีว่าคอมพิวเตอร์ใช้งานได้เฉพาะกับตัวเลขในระบบไบนารี่เท่านั้น กล่าวคือ เลขศูนย์และเลข (“พีชคณิตแบบบูลีน” หากใครก็ตามที่สถาบันหรือโรงเรียน) หนึ่งไบต์ประกอบด้วยแปดบิต ซึ่งแต่ละบิตแทนค่าสองยกกำลังสอง โดยเริ่มจากศูนย์ และมากถึงสองถึงบิตที่เจ็ด การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์ - 3 ไม่ใช่เรื่องยากที่จะเข้าใจว่าการผสมค่าศูนย์และค่าผสมที่เป็นไปได้ทั้งหมดในโครงสร้างดังกล่าวสามารถ ต้องเป็น 256 เท่านั้น การแปลงตัวเลขจากระบบไบนารี่เป็นทศนิยมนั้นค่อนข้างง่าย คุณเพียงแค่ต้องรวมพลังทั้งหมดของทั้งสองเข้าด้วยกันโดยให้อันที่อยู่เหนือพวกมัน ในตัวอย่างของเรา ผลลัพธ์ที่ได้คือ 1 (2 ยกกำลัง 0) บวก 8 (สองยกกำลัง 3) บวก 32 (สองยกกำลังห้า) บวก 64 (ยกกำลังหก) บวก 128 (ยกกำลังเจ็ด). ผลรวมเป็น 233 ในรูปแบบทศนิยม อย่างที่คุณเห็นทุกอย่างง่ายมาก แต่ถ้าคุณดูตารางที่มีอักขระ ASCII อย่างใกล้ชิด คุณจะเห็นว่าอักขระเหล่านั้นแสดงอยู่ในการเข้ารหัสเลขฐานสิบหก ตัวอย่างเช่น "เครื่องหมายดอกจัน" สอดคล้องกับเลขฐานสิบหก 2A ในภาษา Aski คุณคงทราบแล้วว่าในระบบเลขฐานสิบหก นอกจากเลขอารบิคแล้ว ยังใช้ตัวอักษรละตินตั้งแต่ A (หมายถึงสิบ) ถึง F (หมายถึงสิบห้า) อีกด้วย คือการแปลงเลขฐานสองให้เป็นเลขฐานสิบหกใช้วิธีการง่ายๆ ดังต่อไปนี้ ข้อมูลแต่ละไบต์จะถูกแบ่งออกเป็นสองส่วนของสี่บิต เหล่านั้น. ในแต่ละครึ่งไบต์สามารถเข้ารหัสได้เพียงสิบหกค่า (สองถึงกำลังสี่) ในรูปแบบไบนารี่ซึ่งสามารถแสดงเป็นเลขฐานสิบหกได้อย่างง่ายดาย ยิ่งไปกว่านั้น ในครึ่งซ้ายของไบต์ จะต้องนับองศาอีกครั้งโดยเริ่มจากศูนย์ และไม่เป็นไปตามที่แสดงในภาพหน้าจอ เป็นผลให้เราได้รับการเข้ารหัสหมายเลข E9 ในภาพหน้าจอ ฉันหวังว่าแนวทางการใช้เหตุผลของฉันและวิธีแก้ปัญหาปริศนานี้ชัดเจนสำหรับคุณ ทีนี้มาพูดถึงการเข้ารหัสข้อความกันดีกว่า

การเข้ารหัส Asuka - CP866 และ KOI8-R เวอร์ชันขยายพร้อม pseudographics

ดังนั้นเราจึงเริ่มพูดถึง ASCII ซึ่งเป็นจุดเริ่มต้นสำหรับการพัฒนาการเข้ารหัสสมัยใหม่ทั้งหมด (Windows 1251, Unicode, UTF 8) เริ่มแรกมีตัวอักษรละตินตัวเลขอารบิกและสิ่งอื่นเพียง 128 ตัว แต่ในเวอร์ชันขยายคุณสามารถใช้ค่าทั้งหมด 256 ค่าที่สามารถเข้ารหัสได้ในข้อมูลหนึ่งไบต์ เหล่านั้น. เป็นไปได้ที่จะเพิ่มสัญลักษณ์ตัวอักษรภาษาของคุณให้กับ Aski ที่นี่เราจะต้องพูดนอกเรื่องอีกครั้งเพื่ออธิบายว่าทำไมการเข้ารหัสข้อความจึงมีความจำเป็นและเหตุใดจึงสำคัญมาก อักขระบนหน้าจอคอมพิวเตอร์ของคุณถูกสร้างขึ้นบนพื้นฐานของสองสิ่ง - ชุดรูปร่างเวกเตอร์ (ตัวแทน) ของอักขระต่าง ๆ (อยู่ในไฟล์ที่มีแบบอักษรที่ติดตั้งบนคอมพิวเตอร์ของคุณ) และโค้ดที่ช่วยให้คุณสามารถดึงออกมาได้อย่างแม่นยำ จากชุดรูปทรงเวกเตอร์ (ไฟล์ฟอนต์) สัญลักษณ์ที่จะต้องแทรกในตำแหน่งที่ถูกต้อง เห็นได้ชัดว่าแบบอักษรมีหน้าที่รับผิดชอบรูปร่างเวกเตอร์ แต่ระบบปฏิบัติการและโปรแกรมที่ใช้ในแบบอักษรนั้นมีหน้าที่รับผิดชอบในการเข้ารหัส เหล่านั้น. ข้อความใดๆ บนคอมพิวเตอร์ของคุณจะเป็นชุดไบต์ ซึ่งแต่ละข้อความจะเข้ารหัสอักขระตัวเดียวของข้อความนี้ โปรแกรมที่แสดงข้อความนี้บนหน้าจอ (โปรแกรมแก้ไขข้อความ เบราว์เซอร์ ฯลฯ) เมื่อแยกวิเคราะห์โค้ด อ่านการเข้ารหัสของอักขระถัดไป และค้นหารูปแบบเวกเตอร์ที่สอดคล้องกันในไฟล์ฟอนต์ที่ต้องการ ซึ่งเชื่อมต่อเพื่อแสดงสิ่งนี้ เอกสารข้อความ ทุกอย่างเรียบง่ายและซ้ำซาก ซึ่งหมายความว่าในการเข้ารหัสอักขระใดๆ ที่เราต้องการ (เช่น จากตัวอักษรประจำชาติ) ต้องเป็นไปตามเงื่อนไขสองประการ: รูปแบบเวกเตอร์ของอักขระนี้จะต้องอยู่ในแบบอักษรที่ใช้ และอักขระนี้สามารถเข้ารหัสในการเข้ารหัส ASCII แบบขยายได้ ในหนึ่งไบต์ ดังนั้นจึงมีตัวเลือกดังกล่าวมากมาย สำหรับการเข้ารหัสอักขระภาษารัสเซียมี Aska แบบขยายหลายประเภท ตัวอย่างเช่น เดิมทีCP866 ปรากฏขึ้น ซึ่งมีความสามารถในการใช้อักขระจากตัวอักษรรัสเซียและเป็น ASCII เวอร์ชันขยาย นั่นคือส่วนบนของมันใกล้เคียงกับเวอร์ชันพื้นฐานของ Aska อย่างสมบูรณ์ (อักขระละติน 128 ตัว ตัวเลขและอึอื่น ๆ ) ซึ่งนำเสนอในภาพหน้าจอด้านบน แต่ส่วนล่างของตารางที่มีการเข้ารหัส CP866 มีลักษณะตามที่ระบุไว้ใน ภาพหน้าจอด้านล่างและอนุญาตให้เข้ารหัสอีก 128 ตัวอักษร (ตัวอักษรรัสเซียและกราฟิกหลอกทุกประเภท): การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์ - 4 คุณเห็นไหมว่าในคอลัมน์ด้านขวาตัวเลขเริ่มต้นด้วย 8 เพราะ ตัวเลขตั้งแต่ 0 ถึง 7 หมายถึงส่วนพื้นฐานของ ASCII (ดูภาพหน้าจอแรก) ดังนั้นตัวอักษรซีริลลิก "M" ใน CP866 จะมีรหัส 9C (ตั้งอยู่ที่จุดตัดของบรรทัดที่สอดคล้องกับ 9 และคอลัมน์ที่มีหมายเลข C ในระบบเลขฐานสิบหก) ซึ่งสามารถเขียนได้ในข้อมูลหนึ่งไบต์ และหากมีแบบอักษรที่เหมาะสมซึ่งมีอักขระภาษารัสเซีย ตัวอักษรนี้จะปรากฏในข้อความโดยไม่มีปัญหาใดๆ เงินจำนวนนี้มาจากไหน?ภาพเทียมใน CP866 ? ประเด็นทั้งหมดก็คือการเข้ารหัสสำหรับข้อความภาษารัสเซียนี้ได้รับการพัฒนาย้อนกลับไปในช่วงหลายปีที่ผ่านมาซึ่งระบบปฏิบัติการแบบกราฟิกยังไม่แพร่หลายเหมือนในปัจจุบัน และใน Dosa และระบบปฏิบัติการข้อความที่คล้ายกัน pseudographics ทำให้อย่างน้อยก็ทำให้การออกแบบข้อความมีความหลากหลายได้ดังนั้น CP866 และเพื่อนร่วมงานอื่น ๆ ทั้งหมดจากหมวดหมู่ของ Asuka เวอร์ชันขยายจึงมีอยู่มากมาย IBM จัดจำหน่าย CP866 แต่นอกเหนือจากนี้ การเข้ารหัสจำนวนหนึ่งยังได้รับการพัฒนาสำหรับอักขระภาษารัสเซีย เช่นKOI8-R สามารถนำมาประกอบเป็นประเภทเดียวกันได้ (ASCII แบบขยาย) : การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์ - 5หลักการทำงานของมันยังคงเหมือนกับ ของ CP866 ที่อธิบายไว้ก่อนหน้านี้เล็กน้อย - อักขระแต่ละตัวของข้อความจะถูกเข้ารหัสเป็นหนึ่งไบต์เดียว ภาพหน้าจอแสดงครึ่งหลังของตาราง KOI8-R เนื่องจาก ครึ่งแรกสอดคล้องกับ Asuka พื้นฐานอย่างสมบูรณ์ซึ่งแสดงไว้ในภาพหน้าจอแรกของบทความนี้ ในบรรดาคุณสมบัติของการเข้ารหัส KOI8-R สามารถสังเกตได้ว่าตัวอักษรซีริลลิกในตารางไม่เรียงตามตัวอักษรเหมือนที่ทำใน CP866 หากคุณดูภาพหน้าจอแรกสุด (ของส่วนพื้นฐานซึ่งรวมอยู่ในการเข้ารหัสแบบขยายทั้งหมด) คุณจะสังเกตเห็นว่าในตัวอักษรรัสเซีย KOI8-R จะอยู่ในเซลล์เดียวกันกับตารางเป็นตัวอักษรที่สอดคล้องกันของตัวอักษรละติน จากส่วนแรกของตาราง สิ่งนี้ทำเพื่อความสะดวกในการเปลี่ยนจากอักขระภาษารัสเซียเป็นภาษาละตินโดยทิ้งเพียงหนึ่งบิต (สองยกกำลังเจ็ดหรือ 128)

Windows 1251 - ASCII เวอร์ชันใหม่ และเหตุใดจึงมีรอยแตกร้าว

การพัฒนาการเข้ารหัสข้อความเพิ่มเติมนั้นเกิดจากการที่ระบบปฏิบัติการแบบกราฟิกได้รับความนิยมและความจำเป็นในการใช้ระบบเทียมในนั้นก็หายไปเมื่อเวลาผ่านไป เป็นผลให้ทั้งกลุ่มเกิดขึ้นโดยพื้นฐานแล้วยังคงเป็นเวอร์ชันขยายของ Asuka (ข้อความหนึ่งอักขระถูกเข้ารหัสด้วยข้อมูลเพียงไบต์เดียว) แต่ไม่มีการใช้สัญลักษณ์เทียม พวกมันอยู่ในการเข้ารหัส ANSI ที่เรียกว่าซึ่งพัฒนาโดย American Standards Institute ตามสำนวนทั่วไป ชื่อ Cyrillic ยังใช้สำหรับเวอร์ชันที่รองรับภาษารัสเซีย ตัวอย่างนี้จะเป็นWindows 1251 . มันแตกต่างอย่างดีจาก CP866 และ KOI8-R ที่ใช้ก่อนหน้านี้ตรงที่ตำแหน่งของสัญลักษณ์เทียมนั้นถูกยึดครองโดยสัญลักษณ์ที่หายไปของตัวพิมพ์รัสเซีย (ยกเว้นเครื่องหมายเน้นเสียง) รวมถึงสัญลักษณ์ที่ใช้ในภาษาสลาฟใกล้กับ รัสเซีย (ยูเครน, เบลารุส ฯลฯ ) ): เนื่องจากการเข้ารหัสภาษารัสเซียมากมายผู้ผลิตแบบอักษรและผู้ผลิตซอฟต์แวร์จึงปวดหัวอยู่ตลอดเวลาและคุณและฉันผู้อ่านที่รักมักจะประสบปัญหากับ ข้อบกพร่องКодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 6ที่ฉาวโฉ่เหมือนกันเหล่านั้นเมื่อมีความสับสนกับเวอร์ชันที่ใช้ในข้อความ บ่อยครั้งที่พวกเขาออกมาเมื่อส่งและรับข้อความทางอีเมลซึ่งเกี่ยวข้องกับการสร้างตารางการแปลงที่ซับซ้อนมากซึ่งในความเป็นจริงไม่สามารถแก้ปัญหานี้ได้โดยพื้นฐานและบ่อยครั้งที่ผู้ใช้ใช้การทับศัพท์ของตัวอักษรละตินในการติดต่อสื่อสารเพื่อที่จะ หลีกเลี่ยงคำพูดที่ฉาวโฉ่เมื่อใช้การเข้ารหัสภาษารัสเซียเช่น CP866, KOI8-R หรือ Windows 1251 อันที่จริงรอยแตกที่ปรากฏแทนข้อความภาษารัสเซียนั้นเป็นผลมาจากการใช้การเข้ารหัสภาษาที่กำหนดอย่างไม่ถูกต้องซึ่งไม่สอดคล้องกับภาษาใน ซึ่งข้อความนั้นถูกเข้ารหัสไว้ตั้งแต่แรก สมมติว่าหากคุณพยายามแสดงอักขระที่เข้ารหัสโดยใช้ CP866 โดยใช้ตารางรหัส Windows 1251 คำที่ไม่มีความหมายเดียวกันนี้ (ชุดอักขระที่ไม่มีความหมาย) จะปรากฏขึ้นมาแทนที่ข้อความในข้อความโดยสมบูรณ์ สถานการณ์ที่คล้ายกันมักเกิดขึ้นเมื่อสร้างและตั้งค่าเว็บไซต์ ฟอรัม หรือบล็อก เมื่อข้อความที่มีตัวอักษรรัสเซียถูกบันทึกอย่างผิดพลาดในการเข้ารหัสที่ไม่ถูกต้องซึ่งใช้บนไซต์ตามค่าเริ่มต้น หรือในโปรแกรมแก้ไขข้อความที่ไม่ถูกต้อง ซึ่งเพิ่มการปิดปากที่มองไม่เห็น ไปยังรหัสด้วยตาเปล่า ในท้ายที่สุดหลายคนเบื่อกับสถานการณ์นี้ด้วยการเข้ารหัสจำนวนมากและคืบคลานออกมาอย่างต่อเนื่องและมีข้อกำหนดเบื้องต้นสำหรับการสร้างรูปแบบสากลใหม่ที่จะแทนที่รูปแบบที่มีอยู่ทั้งหมดและแก้ไขปัญหาด้วยการปรากฏตัวของข้อความที่อ่านไม่ได้ . นอกจากนั้นยังมีปัญหาเรื่องภาษาอย่างภาษาจีนซึ่งมีตัวอักษรภาษามากกว่า 256 ตัวมากอีกด้วย Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 7

Unicode - การเข้ารหัสสากล UTF 8, 16 และ 32

อักขระนับพันของกลุ่มภาษาเอเชียตะวันออกเฉียงใต้นี้ไม่สามารถอธิบายได้ในข้อมูลหนึ่งไบต์ที่ได้รับการจัดสรรสำหรับการเข้ารหัสอักขระใน ASCII เวอร์ชันขยาย เป็นผลให้กลุ่มที่เรียกว่าUnicode (Unicode Consortium) ถูกสร้างขึ้นด้วยความร่วมมือของผู้นำในอุตสาหกรรมไอทีจำนวนมาก (ผู้ผลิตซอฟต์แวร์ที่เข้ารหัสฮาร์ดแวร์ผู้สร้างแบบอักษร) ซึ่งสนใจในการเกิดการเข้ารหัสข้อความสากล รูปแบบแรกที่เผยแพร่ภายใต้การอุปถัมภ์ของ Unicode Consortium คือUTF 32 หมายเลขในชื่อการเข้ารหัสหมายถึงจำนวนบิตที่ใช้ในการเข้ารหัสอักขระหนึ่งตัว 32 บิตเท่ากับข้อมูล 4 ไบต์ที่จำเป็นในการเข้ารหัสอักขระตัวเดียวในการเข้ารหัส UTF สากลใหม่ เป็นผลให้ไฟล์เดียวกันกับข้อความที่เข้ารหัสใน ASCII เวอร์ชันขยายและ UTF-32 ในกรณีหลังจะมีขนาด (น้ำหนัก) ใหญ่กว่าสี่เท่า สิ่งนี้ไม่ดี แต่ตอนนี้เรามีโอกาสที่จะเข้ารหัสโดยใช้ UTF จำนวนอักขระเท่ากับสองยกกำลังสามสิบวินาที ( อักขระนับพันล้านตัวที่จะครอบคลุมค่าที่จำเป็นจริงๆ ด้วยระยะขอบมหาศาล) แต่หลายประเทศที่มีภาษาของกลุ่มยุโรปไม่จำเป็นต้องใช้อักขระจำนวนมากเช่นนี้ในการเข้ารหัสเลยอย่างไรก็ตามเมื่อใช้ UTF-32 พวกเขาได้รับน้ำหนักของเอกสารข้อความเพิ่มขึ้นสี่เท่าโดยไม่มีเหตุผล และส่งผลให้ปริมาณการรับส่งข้อมูลอินเทอร์เน็ตและข้อมูลที่จัดเก็บเพิ่มขึ้น นี่เป็นจำนวนมากและไม่มีใครสามารถจ่ายขยะเช่นนี้ได้ อันเป็นผลมาจากการพัฒนา Unicode UTF-16 ปรากฏขึ้น ซึ่งประสบความสำเร็จอย่างมากจนถูกนำมาใช้เป็นพื้นที่ฐานสำหรับอักขระทั้งหมดที่เราใช้โดยค่าเริ่มต้น ใช้สองไบต์ในการเข้ารหัสอักขระหนึ่งตัว มาดูกันว่าสิ่งนี้มีลักษณะอย่างไร ในระบบปฏิบัติการ Windows คุณสามารถปฏิบัติตามเส้นทาง "เริ่ม" - "โปรแกรม" - "อุปกรณ์เสริม" - "เครื่องมือระบบ" - "ตารางอักขระ" เป็นผลให้ตารางจะเปิดขึ้นพร้อมกับรูปร่างเวกเตอร์ของแบบอักษรทั้งหมดที่ติดตั้งในระบบของคุณ หากคุณเลือกชุดอักขระ Unicode ใน "ตัวเลือกขั้นสูง" คุณจะสามารถเห็นช่วงอักขระทั้งหมดที่รวมอยู่ในแบบอักษรแต่ละแบบอักษรแยกกัน อย่างไรก็ตามเมื่อคลิกที่รายการใดรายการหนึ่งคุณจะเห็นรหัสสองไบต์ในรูปแบบ UTF-16ประกอบด้วยเลขฐานสิบหกสี่หลัก: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 8สามารถเข้ารหัสอักขระ UTF-16 ได้กี่ตัวโดยใช้ 16 บิต 65,536 (สองยกกำลังสิบหก) และนี่คือตัวเลขที่นำมาใช้เป็นช่องว่างฐานใน Unicode นอกจากนี้ มีวิธีการเข้ารหัสประมาณสองล้านอักขระโดยใช้วิธีนี้ แต่วิธีเหล่านี้ถูกจำกัดไว้เพียงพื้นที่ขยายข้อความหนึ่งล้านอักขระ แต่ถึงแม้การเข้ารหัส Unicode เวอร์ชันที่ประสบความสำเร็จนี้ก็ไม่ได้สร้างความพึงพอใจให้กับผู้ที่เขียนโปรแกรมเป็นภาษาอังกฤษเท่านั้นเพราะหลังจากเปลี่ยนจาก ASCII เวอร์ชันขยายเป็น UTF-16 น้ำหนักของเอกสารก็เพิ่มขึ้นสองเท่า (หนึ่งไบต์ต่อ อักขระใน Aski และสองไบต์สำหรับอักขระเดียวกันใน YUTF-16) เพื่อสร้างความพึงพอใจให้กับทุกคนและทุกสิ่งในกลุ่ม Unicode ที่มีการตัดสินใจที่จะสร้างการเข้ารหัสที่มีความยาวผันแปรได้ มันถูกเรียกว่า UTF-8 แม้จะมีชื่อแปดชื่อ แต่จริงๆ แล้วมีความยาวผันแปรได้ เช่น อักขระของข้อความแต่ละตัวสามารถเข้ารหัสเป็นลำดับความยาวหนึ่งถึงหกไบต์ ในทางปฏิบัติ UTF-8 ใช้ช่วงตั้งแต่ 1 ถึง 4 ไบต์เท่านั้น เนื่องจากโค้ดที่เกิน 4 ไบต์ ในทางทฤษฎีแล้วเป็นไปไม่ได้ที่จะจินตนาการถึงสิ่งใดๆ อีกต่อไป อักขระละตินทั้งหมดในนั้นจะถูกเข้ารหัสเป็นหนึ่งไบต์ เช่นเดียวกับใน ASCII แบบเก่าที่ดี สิ่งที่น่าสังเกตคือในกรณีของการเข้ารหัสเฉพาะตัวอักษรละติน แม้แต่โปรแกรมที่ไม่เข้าใจ Unicode ก็จะยังคงอ่านสิ่งที่เข้ารหัสใน YTF-8 นั่นคือส่วนพื้นฐานของ Asuka ถูกถ่ายโอนไปยังผลิตผลของกลุ่ม Unicode นี้ อักขระซีริลลิกใน UTF-8 จะถูกเข้ารหัสเป็นสองไบต์ และตัวอย่างเช่น อักขระจอร์เจียจะถูกเข้ารหัสเป็นสามไบต์ หลังจากสร้าง UTF 16 และ 8 แล้ว Unicode Consortium ได้แก้ไขปัญหาหลัก - ตอนนี้เรามีพื้นที่โค้ดเดียวในแบบอักษรของเรา และตอนนี้ผู้ผลิตสามารถเติมด้วยอักขระข้อความในรูปแบบเวกเตอร์ตามจุดแข็งและความสามารถเท่านั้น ใน "ตารางอักขระ" ด้านบน คุณจะเห็นว่าแบบอักษรที่ต่างกันรองรับจำนวนอักขระที่ต่างกัน ฟอนต์แบบ Unicode บางตัวอาจมีขนาดค่อนข้างหนัก แต่ตอนนี้พวกเขาไม่ได้แตกต่างกันในความจริงที่ว่าพวกมันถูกสร้างขึ้นสำหรับการเข้ารหัสที่แตกต่างกัน แต่ในความจริงที่ว่าผู้ผลิตแบบอักษรได้เติมหรือไม่ได้เติมพื้นที่โค้ดเดียวด้วยรูปแบบเวกเตอร์บางอย่าง

คำบ้า ๆ แทนตัวอักษรรัสเซีย - วิธีแก้ไข

ตอนนี้เรามาดูกันว่า krakozyabrs ปรากฏแทนข้อความอย่างไรหรือกล่าวอีกนัยหนึ่งคือเลือกการเข้ารหัสที่ถูกต้องสำหรับข้อความภาษารัสเซียอย่างไร ที่จริงแล้วมันถูกตั้งค่าไว้ในโปรแกรมที่คุณสร้างหรือแก้ไขข้อความนี้หรือโค้ดโดยใช้ส่วนของข้อความ ในการแก้ไขและสร้างไฟล์ข้อความ โดยส่วนตัวแล้วฉันใช้ตัวแก้ไข Html และ PHP Notepad++ ที่ดีมากในความคิดของ ฉัน อย่างไรก็ตาม มันสามารถเน้นไวยากรณ์ของภาษาโปรแกรมและมาร์กอัปอื่นๆ ได้หลายร้อยภาษา และยังมีความสามารถในการขยายโดยใช้ปลั๊กอินอีกด้วย อ่านบทวิจารณ์โดยละเอียดของโปรแกรมที่ยอดเยี่ยมนี้ได้จากลิงก์ที่ให้ไว้ ในเมนูด้านบนของ Notepad++ มีรายการ "การเข้ารหัส" ซึ่งคุณจะมีโอกาสแปลงตัวเลือกที่มีอยู่ให้เป็นตัวเลือกที่ใช้บนไซต์ของคุณตามค่าเริ่มต้น: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 9ในกรณีของไซต์บน Joomla 1.5 และสูงกว่า เช่น เช่นเดียวกับในกรณีของบล็อกบน WordPress คุณควรหลีกเลี่ยงลักษณะที่ปรากฏ Krakozyabrov เลือกตัวเลือก UTF 8 โดยไม่มี BOM คำนำหน้า BOM คืออะไร ความจริงก็คือเมื่อพวกเขากำลังพัฒนาการเข้ารหัส YUTF-16 ด้วยเหตุผลบางอย่างพวกเขาจึงตัดสินใจแนบมันเข้ากับมันเช่นความสามารถในการเขียนโค้ดอักขระทั้งในลำดับโดยตรง (เช่น 0A15) และย้อนกลับ (150A) . และเพื่อให้โปรแกรมเข้าใจว่าลำดับใดในการอ่านรหัสจึง มีการประดิษฐ์ BOM (Byte Order Mark หรืออีกนัยหนึ่งคือลายเซ็น) ซึ่งแสดงโดยการเพิ่มไบต์เพิ่มเติมสามไบต์ที่จุดเริ่มต้นของเอกสาร ในการเข้ารหัส UTF-8 ไม่มีการจัดเตรียม BOM ไว้ในกลุ่ม Unicode ดังนั้นการเพิ่มลายเซ็น (สามไบต์พิเศษที่มีชื่อเสียงเหล่านั้นที่ตอนต้นของเอกสาร) เป็นเพียงการป้องกันไม่ให้บางโปรแกรมอ่านโค้ด ดังนั้นเมื่อบันทึกไฟล์ในรูปแบบ UTF เราต้องเลือกตัวเลือกที่ไม่มี BOM เสมอ (ไม่มีลายเซ็น) ดังนั้นคุณ จะป้องกัน ตัวเองล่วงหน้าจากการคลานออกมาจาก krakozyabrs สิ่งที่น่าสังเกตคือบางโปรแกรมใน Windows ไม่สามารถทำได้ (ไม่สามารถบันทึกข้อความใน UTF-8 โดยไม่มี BOM) ตัวอย่างเช่น Windows Notepad ที่มีชื่อเสียงเหมือนกัน จะบันทึกเอกสารในรูปแบบ UTF-8 แต่ยังคงเพิ่มลายเซ็น (พิเศษสามไบต์) ที่จุดเริ่มต้นของเอกสาร ยิ่งไปกว่านั้น ไบต์เหล่านี้จะเหมือนกันเสมอ - อ่านโค้ดตามลำดับโดยตรง แต่บนเซิร์ฟเวอร์เนื่องจากสิ่งเล็กน้อยนี้ปัญหาอาจเกิดขึ้นได้ - โจรจะออกมา ดังนั้น อย่าใช้ Windows Notepad ทั่วไปไม่ว่าในกรณีใด ๆเพื่อแก้ไขเอกสารบนไซต์ของคุณหากคุณไม่ต้องการให้มีรอยร้าวปรากฏขึ้น ฉันถือว่าโปรแกรมแก้ไข Notepad ++ ที่กล่าวถึงแล้วเป็นตัวเลือกที่ดีที่สุดและง่ายที่สุดซึ่งแทบไม่มีข้อเสียและมีเพียงข้อดีเท่านั้น ใน Notepad++ เมื่อคุณเลือกการเข้ารหัส คุณจะมีตัวเลือกในการแปลงข้อความเป็นการเข้ารหัส UCS-2 ซึ่งใกล้เคียงกับมาตรฐาน Unicode มาก นอกจากนี้ใน Notepad ยังสามารถเข้ารหัสข้อความใน ANSI ได้เช่น ในส่วนที่เกี่ยวข้องกับภาษารัสเซียนี่จะเป็น Windows 1251 ซึ่งเราได้อธิบายไว้ข้างต้นแล้วข้อมูลนี้มาจากไหน? มีการลงทะเบียนในรีจิสทรีของระบบปฏิบัติการ Windows ของคุณ - การเข้ารหัสใดให้เลือกในกรณีของ ANSI ซึ่งจะเลือกในกรณีของ OEM (สำหรับภาษารัสเซียจะเป็น CP866) หากคุณตั้งค่าภาษาเริ่มต้นอื่นบนคอมพิวเตอร์ของคุณ การเข้ารหัสเหล่านี้จะถูกแทนที่ด้วยภาษาที่คล้ายกันจากหมวดหมู่ ANSI หรือ OEM สำหรับภาษาเดียวกันนั้น หลังจากที่คุณบันทึกเอกสารใน Notepad++ ในการเข้ารหัสที่คุณต้องการหรือเปิดเอกสารจากไซต์เพื่อทำการแก้ไข คุณจะเห็นชื่อเอกสารที่มุมขวาล่างของตัวแก้ไข: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 10เพื่อหลีกเลี่ยงความสับสนนอกเหนือจากขั้นตอนที่อธิบายไว้ข้างต้น จะมีประโยชน์ในการเขียนซอร์สโค้ดทุกหน้าของข้อมูลไซต์เกี่ยวกับการเข้ารหัสนี้ในส่วนหัวเพื่อไม่ให้เกิดความสับสนบนเซิร์ฟเวอร์หรือโฮสต์ในพื้นที่ โดยทั่วไป ภาษามาร์กอัปไฮเปอร์เท็กซ์ทั้งหมดยกเว้น Html จะใช้การประกาศ xml พิเศษซึ่งระบุการเข้ารหัสข้อความ
<?xml version="1.0" encoding="windows-1251"?>
ก่อนที่จะแยกวิเคราะห์โค้ด เบราว์เซอร์จะรู้ว่ากำลังใช้เวอร์ชันใด และต้องตีความโค้ดอักขระของภาษานั้นอย่างไร แต่สิ่งที่น่าสังเกตก็คือ หากคุณบันทึกเอกสารใน Unicode เริ่มต้น การประกาศ xml นี้สามารถละเว้นได้ (การเข้ารหัสจะถือเป็น UTF-8 หากไม่มี BOM หรือ UTF-16 หากมี BOM) ในกรณีของเอกสาร HTML องค์ประกอบ Meta ใช้เพื่อระบุการเข้ารหัส ซึ่งอยู่ระหว่างแท็กเปิดและปิด Head:
<head>
...
<meta charset="utf-8">
...
</head>
รายการนี้ค่อนข้างแตกต่างจากมาตรฐานใน Html 4.01 แต่เป็นไปตามมาตรฐาน Html 5 โดยสมบูรณ์ และเบราว์เซอร์ใดๆ ที่ใช้อยู่ในปัจจุบันจะเข้าใจได้อย่างถูกต้อง ตามทฤษฎี องค์ประกอบ Meta ที่ระบุการเข้ารหัสของเอกสาร Html ควรวางให้สูงที่สุดเท่าที่จะเป็นไปได้ในส่วนหัวของเอกสารดังนั้นเมื่อถึงเวลาที่ข้อความพบอักขระตัวแรกที่ไม่ได้มาจาก ANSI พื้นฐาน (ซึ่งจะอ่านอย่างถูกต้องและอยู่ในนั้นเสมอ) รูปแบบใดก็ตาม) เบราว์เซอร์ควรมีข้อมูลเกี่ยวกับวิธีตีความรหัสของอักขระเหล่านี้อยู่แล้ว ลิงก์ไปยังแหล่งที่มาดั้งเดิม: การเข้ารหัสข้อความ ASCII (Windows 1251, CP866, KOI8-R) และ Unicode (UTF 8, 16, 32) - วิธีแก้ไขปัญหาแครกเกอร์
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION