คอมพิวเตอร์, การเขียนโปรแกรม
การเข้ารหัสอักขระ UTF-8
Unicode สนับสนุนเกือบทุกชุดอักขระที่มีอยู่ การเข้ารหัสที่ดีที่สุดสำหรับชุดอักขระ Unicode คือการเข้ารหัส UTF-8 จะให้ความเข้ากันได้กับ ASCII, ความต้านทานต่อข้อมูลความเสียหายประสิทธิภาพและความสะดวกในการประมวลผล แต่เกี่ยวกับทุกอย่างตามลำดับ
รูปแบบของการเขียนโค้ด
คอมพิวเตอร์ดำเนินการโดยใช้ตัวเลขไม่ใช่เพียงแค่วัตถุทางคณิตศาสตร์เชิงนามธรรมเท่านั้น แต่เป็นชุดข้อมูลที่จัดเก็บและประมวลผลไบต์ข้อมูลขนาดคงที่และคำพูดแบบ 32 บิต มาตรฐานการเข้ารหัสจะต้องคำนึงถึงเรื่องนี้เมื่อพิจารณาวิธีการแสดง ตัวอักษร ด้วย ตัวเลข
ในระบบคอมพิวเตอร์จำนวนเต็มจะถูกเก็บไว้ในเซลล์หน่วยความจำขนาด 8 บิต (1 ไบต์) 16 หรือ 32 บิต รูปแบบการเข้ารหัส Unicode แต่ละตัวจะกำหนดลำดับของเซลล์หน่วยความจำที่เป็นจำนวนเต็มที่ตรงกับอักขระเฉพาะ มาตรฐานมีรูปแบบการเข้ารหัสตัวอักษร Unicode สามแบบ: บล็อค 8, 16 และ 32 บิต ดังนั้นจะเรียกว่า UTF-8, UTF-16 และ UTF-32 ชื่อ UTF ย่อมาจากรูปแบบการแปลง Unicode แต่ละรูปแบบของการเข้ารหัสเป็นวิธีที่เท่าเทียมกันในการแสดงอักขระ Unicode มีข้อได้เปรียบในแอ็พพลิเคชันต่างๆ
การเข้ารหัสเหล่านี้สามารถใช้เพื่อแทนอักขระทั้งหมดของมาตรฐาน Unicode ดังนั้นพวกเขาจะเข้ากันได้อย่างเต็มที่สำหรับการแก้ปัญหาด้วยเหตุผลที่แตกต่างกันโดยใช้รูปแบบที่แตกต่างกันของการเขียนโปรแกรม การเข้ารหัสแต่ละครั้งจะสามารถแปลงเป็นรูปแบบอื่นได้โดยไม่สูญเสียข้อมูล
หลักการของการไม่บังคับใช้
รูปแบบการเข้ารหัส Unicode แต่ละแบบได้รับการออกแบบโดยคำนึงถึงความไม่สามารถยอมรับได้ของการซ้อนทับกันบางส่วน ตัวอย่างเช่น Windows-932 สร้างอักขระจากหนึ่งหรือสองไบต์ของรหัส ความยาวของลำดับขึ้นอยู่กับไบต์แรกดังนั้นค่าไบต์ชั้นในลำดับของไบต์ที่สองและไบต์เดี่ยวไม่ตัดกัน อย่างไรก็ตามค่าของไบต์เดี่ยวและไบต์ปิดของซีเควนซ์อาจเหมือนกัน ซึ่งหมายความว่าเมื่อค้นหาอักขระ D (รหัส 44) คุณสามารถเข้าใจผิดว่าป้อนส่วนที่สองของลำดับไบต์สองตัว "D" (รหัส 84 44) เพื่อตรวจสอบลำดับที่ถูกต้องโปรแกรมต้องคำนึงถึงไบต์ก่อนหน้านี้
สถานการณ์จะกลายเป็นเรื่องที่ซับซ้อนมากขึ้นหาก master และการปิดไบต์ตรงกัน ซึ่งหมายความว่าเพื่อย้อนกลับความกำกวมการค้นหาแบบย้อนกลับจะดำเนินการไปจนถึงจุดเริ่มต้นของข้อความหรือลำดับของรหัสที่ไม่ซ้ำกัน ไม่เพียง แต่ไม่มีประสิทธิภาพ แต่ไม่สามารถป้องกันข้อผิดพลาดที่เป็นไปได้เนื่องจากหนึ่งไบต์ที่ไม่ดีเพียงพอที่จะทำให้ข้อความทั้งหมดไม่สามารถอ่านได้
รูปแบบการแปลง Unicode หลีกเลี่ยงปัญหานี้เนื่องจากค่าของหน่วยเก็บข้อมูลชั้นนำต่อท้ายและหน่วยเดียวไม่ตรงกัน ด้วยเหตุนี้การเข้ารหัส Unicode ทั้งหมดจึงเหมาะสำหรับการค้นหาและเปรียบเทียบไม่ให้ผลลัพธ์ที่ไม่ถูกต้องเนื่องจากความบังเอิญในส่วนต่างๆของรหัสอักขระ ความจริงที่ว่ารูปแบบการเข้ารหัสเหล่านี้สอดคล้องกับหลักการของการไม่ได้รับมอบหมายแตกต่างจากการเข้ารหัสแบบหลายไบต์แบบเอเชียตะวันออกอื่น ๆ
อีกด้านหนึ่งของการไม่ตัดกันของการ เข้ารหัส Unicode คืออักขระแต่ละตัวมีขอบเขตที่กำหนดไว้อย่างชัดเจน วิธีนี้ช่วยลดความจำเป็นในการสแกนอักขระก่อนหน้านี้ที่ไม่ทราบแน่ชัด คุณลักษณะนี้ของการเข้ารหัสมักเรียกว่าการซิงโครไนซ์ด้วยตนเอง ความผิดเพี้ยนของหน่วยรหัสหนึ่ง ๆ จะนำไปสู่ความผิดเพี้ยนของอักขระเพียงตัวเดียวและสัญลักษณ์โดยรอบยังคงเหมือนเดิม ในรูปแบบการแปลง 8 บิตถ้าตัวชี้อ้างอิงถึงจุดเริ่มต้นไบต์ด้วย 10xxxxxx (ในการเข้ารหัสไบนารี) จำเป็นต้องใช้การค้นหาแบบย้อนกลับตั้งแต่หนึ่งถึงสามรายการเพื่อค้นหาจุดเริ่มต้นของอักขระ
ความมั่นคง
Unicode Consortium รองรับรูปแบบการเข้ารหัสทั้ง 3 แบบอย่างสมบูรณ์ สิ่งสำคัญคือต้องไม่คัดค้าน UTF-8 และ Unicode เนื่องจากรูปแบบการแปลงทั้งหมดมีการใช้งานรูปแบบการเข้ารหัสอักขระ Unicode ที่ถูกต้องเท่าเทียมกัน
Byte ปฐมนิเทศ
เพื่อเป็นตัวแทนของสัญลักษณ์ UTF-32 คุณต้องมีหน่วยรหัส 32 บิตที่ตรงกับรหัส Unicode UTF-16 - จากหน่วย 1-1 บิต 16 หน่วย และ UTF-8 ใช้ไบต์ได้สูงสุด 4 ไบต์
การเข้ารหัสของ UTF-8 ได้รับการออกแบบมาสำหรับเข้ากันได้กับระบบที่เน้นไบต์ตาม ASCII ซอฟต์แวร์ส่วนใหญ่ที่มีอยู่และการปฏิบัติด้านเทคโนโลยีสารสนเทศเป็นเวลานานอาศัยการเป็นตัวแทนของสัญลักษณ์ในรูปแบบของลำดับไบต์ โปรโตคอลจำนวนมากขึ้นอยู่กับความไม่แน่นอนของการ เข้ารหัส ASCII และใช้หรือหลีกเลี่ยงอักขระควบคุมพิเศษ วิธีที่ง่ายในการปรับ Unicode ให้เหมาะกับสถานการณ์ดังกล่าวคือการใช้การเข้ารหัสแบบ 8 บิตเพื่อแสดงอักขระ Unicode ที่เทียบเท่ากับอักขระ ASCII หรือตัวควบคุมใด ๆ สำหรับข้อมูลนี้การเข้ารหัส UTF-8 มีไว้เพื่อวัตถุประสงค์
ความยาวตัวแปร
UTF-8 คือการเข้ารหัสที่มีความยาวเป็นตัวแปรซึ่งประกอบด้วยหน่วยเก็บข้อมูล 8 บิตซึ่งบิตสั่งสูงจะระบุว่าส่วนใดของซีเควนซ์แต่ละไบต์เป็นของตัวใด ช่วงหนึ่งของค่าถูกสงวนไว้สำหรับองค์ประกอบแรกของลำดับโค้ดอีกส่วนหนึ่งสำหรับองค์ประกอบที่ตามมา ซึ่งจะทำให้มั่นใจได้ว่าจะได้รับการเข้ารหัสแยกกัน
ASCII
การเข้ารหัส UTF-8 สนับสนุนรหัส ASCII (0x00-0x7F) อย่างสมบูรณ์ ซึ่งหมายความว่าอักขระ Unicode U + 0000-U + 007F จะถูกแปลงเป็นไบต์ 0x00-0x7F UTF-8 และทำให้ไม่สามารถแยกแยะได้จาก ASCII นอกจากนี้เพื่อหลีกเลี่ยงความคลุมเครือค่า 0x00-0x7F จะไม่ถูกใช้อีกต่อไปในไบต์ใด ๆ ของการแสดงอักขระ Unicode ในการเข้ารหัสสัญลักษณ์ที่ไม่ใช่ ideographic อื่นที่ไม่ใช่ ASCII จะมีลำดับสองไบต์ สัญลักษณ์ของช่วง U + 0800-U + FFFF แสดงเป็นสามไบต์ในขณะที่สัญลักษณ์เพิ่มเติมที่มีรหัสมากกว่า U + FFFF ต้องมีสี่ไบต์
ขอบเขตการใช้งาน
มักใช้ในการเข้ารหัส UTF-8 ในโปรโตคอล HTML และคล้ายคลึงกับ
XML กลายเป็นมาตรฐานแรกที่มีการเข้ารหัสแบบ UTF-8 เต็มรูปแบบ องค์กรที่เกี่ยวข้องกับมาตรฐานด้วยแนะนำให้ใช้ ปัญหาของการสนับสนุน URL แอดเดรสอื่นที่ไม่ใช่อักขระ ASCII ได้รับการแก้ไขเมื่อ Consortium W3C และกลุ่มวิศวกรรม IETF ตกลงที่จะเข้ารหัส URL ทั้งหมดเฉพาะใน UTF-8
ความเข้ากันได้กับ ASCII ช่วยอำนวยความสะดวกในการเปลี่ยนไปใช้ซอฟต์แวร์ใหม่ ด้วย UTF-8 บรรณาธิการข้อความส่วนใหญ่ทำงานรวมทั้ง JEdit, Emacs, BBEdit, Eclipse และ Notepad ของระบบปฏิบัติการ Windows ไม่มีรูปแบบอื่นของการเข้ารหัส Unicode สามารถอวดของการสนับสนุนดังกล่าวจากเครื่องมือ
ประโยชน์ของการเข้ารหัสคือว่าประกอบด้วยลำดับของไบต์ ด้วยสตริง UTF-8 การทำงานในภาษา C และภาษาโปรแกรมอื่น ๆ ทำได้ง่าย นี่คือรูปแบบเฉพาะของการเข้ารหัสที่ไม่จำเป็นต้องมีการทำเครื่องหมายลำดับของไบต์ BOM หรือการประกาศการเข้ารหัสใน XML
ประสานตนเอง
ในสภาพแวดล้อมที่ใช้การประมวลผลอักขระ 8 บิตเมื่อเทียบกับการเข้ารหัสหลายไบต์อื่น ๆ UTF-8 มีข้อดีดังนี้:
- ไบต์แรกของลำดับโค้ดประกอบด้วยข้อมูลเกี่ยวกับความยาว ซึ่งจะเพิ่มประสิทธิภาพในการค้นหาโดยตรง
- เป็นเรื่องง่ายที่จะหาจุดเริ่มต้นของตัวอักษรเนื่องจากไบต์เริ่มต้นถูก จำกัด ไว้ที่ช่วงค่าคงที่
- ไม่มีจุดตัดของค่าไบต์
เปรียบเทียบข้อดี
การเข้ารหัส UTF-8 มีขนาดกะทัดรัด แต่เมื่อใช้การเข้ารหัสอักขระเอเชียตะวันออก (จีนญี่ปุ่นเกาหลีใช้อักขระจีน) จะใช้ลำดับ 3 ไบต์ นอกจากนี้การเข้ารหัส UTF-8 จะด้อยกว่ารูปแบบอื่น ๆ ของการเข้ารหัสด้วยความเร็วในการประมวลผล การเรียงลำดับแบบไบนารีจะให้ผลเหมือนกับการจัดเรียงไบนารีแบบ Unicode
รูปแบบการเข้ารหัสอักขระ
รูปแบบการเข้ารหัสอักขระประกอบด้วยรูปแบบการเข้ารหัสอักขระและวิธีจัดเรียงหน่วยรหัสแบบไบต์โดยพิกเซล เมื่อต้องการกำหนดรูปแบบการเข้ารหัสตามมาตรฐาน Unicode ให้ใช้เครื่องหมายสั่งซื้อไบต์แรก (BOM, Byte Order Mark)
เมื่อคุณเปิด BOM ใน UTF-8 ฟังก์ชันของฉลากถูก จำกัด ด้วยการระบุรูปแบบการเข้ารหัสเท่านั้น ปัญหาในการกำหนดลำดับของไบต์ใน UTF-8 ไม่ใช่เนื่องจากขนาดหน่วยการเข้ารหัสเป็นหนึ่งไบต์ การใช้ BOM สำหรับรูปแบบการเข้ารหัสนี้ไม่จำเป็นหรือแนะนำ BOM สามารถเกิดขึ้นได้ในข้อความที่แปลงจากการเข้ารหัสอื่น ๆ ที่ใช้เครื่องหมายคำสั่งไบต์หรือสำหรับลายเซ็นการเข้ารหัส UTF-8 เป็นลำดับของ 3 ไบต์ EF 16 BB 16 BF 16
วิธีการตั้งค่าการเข้ารหัส UTF-8
ใน HTML การ เข้ารหัส UTF-8 มีการ ตั้งค่าโดยใช้โค้ดต่อไปนี้:
หัว
˂meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" ˃
ใน PHP การเข้ารหัส UTF-8 มีการระบุโดยใช้ฟังก์ชัน header () ที่จุดเริ่มต้นของไฟล์มากหลังจากตั้งค่าระดับเอาต์พุตข้อผิดพลาด:
˂ Php
Error_reporting (-1);
Header ('Content-Type: text / html; charset = utf-8');
เพื่อเชื่อมต่อกับฐานข้อมูล MySQL การเข้ารหัสของ UTF-8 มีการตั้งค่าดังนี้:
˂ Php
Mysql_set_charset ('utf8');
ในไฟล์ CSS จะมีการเข้ารหัสอักขระ UTF-8 ดังนี้:
@charset "utf-8";
เมื่อบันทึกไฟล์ทุกประเภทจะมีการเลือกการเข้ารหัส UTF-8 โดยไม่ใช้ BOM มิฉะนั้นไซต์จะไม่สามารถใช้งานได้ เมื่อต้องการทำเช่นนี้ในโปรแกรม DreamWeave เลือกรายการเมนู "Modifications - Page Properties - Title / Encoding" เปลี่ยนการเข้ารหัสเป็น UTF-8 จากนั้นคุณควรโหลดหน้าเว็บซ้ำอีกครั้งยกเลิกการเลือกช่องทำเครื่องหมาย "Connect Unicode Signatures (BOM)" และใช้การเปลี่ยนแปลง หากข้อความบนหน้าหรือในฐานข้อมูลถูกป้อนโดยใช้รูปแบบอื่นแล้วจะต้องป้อนหรือเข้ารหัสอีกครั้ง เมื่อใช้นิพจน์ปกติคุณจำเป็นต้องใช้ตัวปรับค่า u
นอกจากนี้คุณยังสามารถบันทึกไฟล์ในการเข้ารหัส UTF-8 ใน Windows Notepad หลังจากเลือกรายการเมนู "File - Save As ... " ให้ตั้งค่ารูปแบบการเข้ารหัสที่จำเป็นและบันทึกไฟล์ด้วยการเข้ารหัส UTF-8
ในตัวแก้ไขข้อความ Notepad ++ ถ้าการเข้ารหัสแตกต่างจาก UTF-8 ให้เปลี่ยนการเข้ารหัสและบันทึกในการเข้ารหัส UTF-8 ผ่านรายการเมนู "Convert to UTF-8 without BOM"
ไม่มีทางเลือกอื่น
ในบริบทของโลกาภิวัฒน์เมื่อขอบเขตทางการเมืองและภาษาไม่ชัดเจนชุดอักขระที่มีลักษณะเฉพาะในท้องถิ่นกลายเป็นประโยชน์น้อยลง Unicode เป็นชุดอักขระเดียวที่สนับสนุน localizations ทั้งหมด และ UTF-8 เป็นตัวอย่างของการใช้ Unicode ที่ถูกต้องซึ่ง:
- สนับสนุนเครื่องมือที่หลากหลายรวมถึงความเข้ากันได้กับการเข้ารหัส ASCII;
- มีความต้านทานต่อความเสียหายของข้อมูล
- ง่ายและมีประสิทธิภาพในการประมวลผล
- ไม่ขึ้นอยู่กับแพลตฟอร์ม
กับการถือกำเนิดของ UTF-8 การอภิปรายเกี่ยวกับรูปแบบของการเข้ารหัสหรือชุดอักขระที่ดีกว่าได้กลายเป็นความหมาย
Similar articles
Trending Now