ความเท่าเทียมกันของ Unicode

การเทียบเท่า Unicodeคือข้อกำหนดตาม มาตรฐานการเข้ารหัส อักขระUnicode ที่ลำดับ โค้ดบาง จุด แสดงถึงอักขระที่เหมือนกัน คุณลักษณะนี้ถูกนำมาใช้ในมาตรฐานเพื่อให้เข้ากันได้กับชุดอักขระ มาตรฐานที่มีอยู่แล้ว ซึ่งมักจะมีอักขระที่คล้ายกันหรือเหมือนกัน

Unicodeมีสองแนวคิดดังกล่าว ความเทียบเท่าตาม รูปแบบบัญญัติและความเข้ากันได้ ลำดับ จุดโค้ดที่กำหนดว่าเทียบเท่ากับมาตรฐานจะถือว่ามีลักษณะและความหมายเหมือนกันเมื่อพิมพ์หรือแสดง ตัวอย่างเช่น รหัสจุดU+006E n LATIN SMALL LETTER Nตามด้วยU+0303 ◌̃ COMBINING TILDEถูกกำหนดโดย Unicode เพื่อให้เทียบเท่ากับมาตรฐานบัญญัติของจุดรหัสเดียวU+00F1 ñ LATIN SMALL LETTER N WITH TILDEของตัวอักษรภาษาสเปน ). ดังนั้นลำดับเหล่านั้นควรแสดงในลักษณะเดียวกัน ควรได้รับการปฏิบัติในลักษณะเดียวกันโดยแอปพลิเคชัน เช่น การ เรียงชื่อ ตามตัวอักษรหรือการค้นหาและอาจใช้แทนกันได้ ในทำนองเดียวกัน แต่ละพยางค์อังกูลที่เข้ารหัสเป็นอักขระตัวเดียวอาจถูกเข้ารหัสอย่างเท่าเทียมกันเป็นการรวมกันของ jamo ที่เชื่อมนำหน้า สระ conjoining jamo และหากเหมาะสม ก็อาจเข้ารหัสด้วย jamo ที่ต่อท้ายตามความเหมาะสม

ลำดับที่กำหนดว่าเข้ากันได้จะถือว่ามีลักษณะที่ปรากฏที่แตกต่างกัน แต่มีความหมายเหมือนกันในบางบริบท ดังนั้น ตัวอย่างเช่น จุดโค้ด U+FB00 ( ตัวพิมพ์ควบ "ff") ถูกกำหนดให้เข้ากันได้ (แต่ไม่เทียบเท่ากันทางบัญญัติ) กับลำดับ U+0066 U+0066 (ตัวอักษรละติน "f" สองตัว) ลำดับที่เข้ากันได้อาจได้รับการปฏิบัติในลักษณะเดียวกันในบางแอปพลิเคชัน (เช่นการเรียงลำดับและการจัดทำดัชนี ) แต่ไม่ใช่ในแอปพลิเคชันอื่น และอาจทดแทนกันได้ในบางสถานการณ์ แต่ไม่ใช่ในบางสถานการณ์ ลำดับที่เทียบเท่ากันตามบัญญัติก็เข้ากันได้เช่นกัน แต่สิ่งที่ตรงกันข้ามไม่จำเป็นต้องเป็นจริงเสมอไป

มาตรฐานยังกำหนด ขั้นตอน การทำให้เป็นมาตรฐานของข้อความเรียกว่าการทำให้เป็นมาตรฐานของ Unicodeซึ่งแทนที่ลำดับอักขระที่เทียบเท่ากัน ดังนั้นข้อความทั้งสองที่เทียบเท่ากันจะลดลงเหลือลำดับจุดโค้ดเดียวกัน เรียกว่ารูปแบบการทำให้เป็นมาตรฐานหรือรูปแบบปกติของข้อความต้นฉบับ สำหรับแนวคิดความเท่าเทียมกันแต่ละแบบ Unicode จะกำหนดรูปแบบปกติสองรูปแบบ รูปแบบหนึ่งประกอบด้วยแบบเต็ม (โดยที่จุดโค้ดหลายจุดจะถูกแทนที่ด้วยจุดเดียวทุกครั้งที่เป็นไปได้) และอีกรูปแบบหนึ่งจะสลายตัวอย่างสมบูรณ์ (โดยที่จุดเดียวจะถูกแบ่งออกเป็นหลายจุด)

แหล่งที่มาของความเท่าเทียมกัน

การทำซ้ำอักขระ

เพื่อความเข้ากันได้หรือเหตุผลอื่นๆ บางครั้ง Unicode จะกำหนดจุดโค้ดที่แตกต่างกันสองจุดให้กับเอนทิตีที่มีอักขระเหมือนกัน ตัวอย่างเช่น อักขระ "Å" สามารถเข้ารหัสเป็น U+00C5 (ชื่อมาตรฐาน "LATIN CAPITAL LETTER A WITH RING ABOVE" ซึ่งเป็นตัวอักษรในภาษาสวีเดนและภาษาอื่นๆ อีกหลายภาษา ) หรือเป็น U+212B ("ANGSTROM SIGN" ). แต่สัญลักษณ์ของอังสตรอมถูกกำหนดให้เป็นตัวอักษรสวีเดน และสัญลักษณ์อื่นๆ ส่วนใหญ่ที่เป็นตัวอักษร (เช่น "V" สำหรับโวลต์ ) ไม่มีจุดรหัสแยกต่างหากสำหรับการใช้งานแต่ละครั้ง โดยทั่วไป จุดโค้ดของอักขระที่เหมือนกันจริงๆ (ซึ่งสามารถแสดงผลในลักษณะเดียวกันในฟอนต์ Unicode) ถูกกำหนดให้เทียบเท่ากันตามรูปแบบบัญญัติ

การรวมและแต่งอักขระไว้ล่วงหน้า

เพื่อความสอดคล้องกับมาตรฐานเก่าบางมาตรฐาน Unicode จึงจัดให้มีจุดรหัสเดียวสำหรับอักขระหลายตัวที่สามารถดูเป็นรูปแบบที่แก้ไขของอักขระอื่น ๆ (เช่น U+00F1 สำหรับ "ñ" หรือ U+00C5 สำหรับ "Å") หรือการรวมกันของสองหรือ อักขระเพิ่มเติม (เช่น U+FB00 สำหรับตัวอักษรควบ "ff" หรือ U+0132 สำหรับตัวอักษรดัตช์ " IJ ")

เพื่อความสอดคล้องกับมาตรฐานอื่นๆ และเพื่อความยืดหยุ่นที่มากขึ้น Unicode ยังมีโค้ดสำหรับองค์ประกอบต่างๆ มากมายที่ไม่ได้ใช้เดี่ยวๆ แต่มีไว้เพื่อแก้ไขหรือรวมกับอักขระพื้นฐานที่อยู่ข้างหน้าแทน ตัวอย่างของอักขระที่รวมกัน เหล่านี้ ได้แก่ ตัวหนอนผสมและตัวกำกับเสียงภาษาญี่ปุ่นdakuten ("◌゛", U+3099)

ในบริบทของ Unicode องค์ประกอบของอักขระคือกระบวนการแทนที่จุดรหัสของตัวอักษรฐานตามด้วยอักขระที่รวมตั้งแต่หนึ่งตัวขึ้นไปเป็นอักขระที่เขียนไว้ล่วงหน้า ตัว เดียว และการสลายตัวของตัวละครเป็นกระบวนการที่ตรงกันข้าม

โดยทั่วไป อักขระที่เรียบเรียงไว้ล่วงหน้าถูกกำหนดให้เทียบเท่ากับลำดับของตัวอักษรฐานและเครื่องหมายกำกับเสียงที่ตามมารวมกัน โดยไม่คำนึงถึงลำดับที่อาจเกิดขึ้น

ตัวอย่าง

Amélie ที่มีรูป แบบ Unicodeที่เทียบเท่ากันสองรูปแบบ(NFC และ NFD)
อักขระเอ็นเอฟซี อี ฉัน
จุดรหัส NFC 0041 006d 00e9 006c 0069 0065
จุดรหัส NFD 0041 006d 0065 0301 006c 0069 0065
อักขระ NFD ◌́ ฉัน

การไม่โต้ตอบกับการพิมพ์

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

แบบแผนการพิมพ์

Unicode จัดให้มีจุดรหัสสำหรับอักขระบางตัวหรือกลุ่มอักขระที่ถูกแก้ไขเพื่อเหตุผลด้านสุนทรียศาสตร์เท่านั้น (เช่น ตัวอักษร ควบ อักขระคาตาคานะแบบครึ่งความกว้างหรือตัว อักษรละติน แบบเต็มความกว้างสำหรับใช้ในข้อความภาษาญี่ปุ่น) หรือเพื่อเพิ่มความหมายใหม่โดยไม่มี การสูญเสียต้นฉบับ (เช่น ตัวเลขใน ตำแหน่ง ตัวห้อยหรือตัวยกหรือตัวเลขวงกลม (เช่น "∆") ที่สืบทอดมาจากฟอนต์ภาษาญี่ปุ่นบางตัว) ลำดับดังกล่าวถือว่าเข้ากันได้กับลำดับของอักขระดั้งเดิม (ตัวบุคคลและไม่ได้แก้ไข) เพื่อประโยชน์ของแอปพลิเคชันที่ลักษณะที่ปรากฏและความหมายเพิ่มเติมไม่เกี่ยวข้อง อย่างไรก็ตาม ทั้งสองลำดับไม่ได้รับการประกาศให้เทียบเท่ากันตามหลักบัญญัติ เนื่องจากความแตกต่างนั้นมีค่าความหมายอยู่บ้าง และส่งผลต่อการแสดงข้อความ

ข้อผิดพลาดในการเข้ารหัส

UTF-8และUTF-16 (และการเข้ารหัส Unicode อื่นๆ บางส่วน) ไม่อนุญาตให้มีลำดับของหน่วยโค้ดที่ เป็นไปได้ทั้งหมด ซอฟต์แวร์ที่แตกต่างกันจะแปลงลำดับที่ไม่ถูกต้องให้เป็นอักขระ Unicode โดยใช้กฎที่แตกต่างกัน ซึ่งบางกฎจะสูญเสียมาก (เช่น เปลี่ยนลำดับที่ไม่ถูกต้องทั้งหมดให้เป็นอักขระเดียวกัน) นี่ถือได้ว่าเป็นรูปแบบของการทำให้เป็นมาตรฐานและอาจนำไปสู่ปัญหาเช่นเดียวกับคนอื่นๆ

การทำให้เป็นมาตรฐาน

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

อัลกอริทึม

Unicode จัดเตรียมอัลกอริธึมการทำให้เป็นมาตรฐานมาตรฐานที่สร้างลำดับจุดโค้ดเฉพาะ (ปกติ) สำหรับลำดับทั้งหมดที่เทียบเท่ากัน เกณฑ์ความเท่าเทียมกันอาจเป็นได้ทั้งแบบบัญญัติ (NF) หรือความเข้ากันได้ (NFK) เนื่องจากเราสามารถเลือก องค์ประกอบ ตัวแทนของคลาสที่เทียบเท่า ได้ตามใจชอบ จึง มีรูปแบบมาตรฐานหลายรูปแบบสำหรับเกณฑ์การเทียบเท่าแต่ละเกณฑ์ Unicode มีรูปแบบปกติสองรูปแบบที่มีความหมายทางความหมายสำหรับแต่ละเกณฑ์ความเข้ากันได้: รูปแบบที่ประกอบด้วย NFC และ NFKC และรูปแบบที่แยกส่วน NFD และ NFKD ทั้งรูปแบบที่ประกอบและสลายตัวกำหนดลำดับที่เป็นที่ยอมรับในลำดับจุดโค้ด ซึ่งจำเป็นสำหรับรูปแบบปกติที่จะต้องไม่ซ้ำกัน

เพื่อเปรียบเทียบหรือค้นหาสตริง Unicode ซอฟต์แวร์สามารถใช้รูปแบบที่ประกอบหรือแยกส่วน ตัวเลือกนี้ไม่สำคัญตราบใดที่สตริงทั้งหมดที่เกี่ยวข้องกับการค้นหา การเปรียบเทียบ ฯลฯ จะเหมือนกัน ในทางกลับกัน การเลือกเกณฑ์ความเท่าเทียมกันอาจส่งผลต่อผลการค้นหา ตัวอย่างเช่นตัวพิมพ์ควบแน่นเช่น U+FB03 ( ) เลขโรมันเช่น U+2168 ( ) และแม้แต่ตัวห้อยและตัวยกเช่น U+2075 ( ) มีจุดโค้ด Unicode ของตัวเอง Canonical Normalization (NF) ไม่มีผลกระทบใดๆ เหล่านี้ แต่การทำให้เป็นมาตรฐานความเข้ากันได้ (NFK) จะแยก ffi ligature ออกเป็นตัวอักษรที่เป็นส่วนประกอบ ดังนั้นการค้นหา U+0066 ( f ) เป็นสตริงย่อยจะประสบความสำเร็จในการทำให้เป็นมาตรฐาน NFKC ของ U+FB03 แต่ไม่ได้อยู่ในการทำให้เป็นมาตรฐานของ NFC ของ U+FB03 ในทำนองเดียวกันเมื่อค้นหาตัวอักษรละตินI (U+0049) ในเลขโรมันที่เขียนไว้ล่วงหน้า (U+2168) ในทำนองเดียวกัน ตัวยก (U+2075) จะถูกแปลงเป็น5 (U+0035) โดยการแมปความเข้ากันได้

การแปลงตัวยกให้เทียบเท่าพื้นฐานอาจไม่เหมาะสมอย่างไรก็ตามสำหรับ ซอฟต์แวร์ Rich Textเนื่องจากข้อมูลตัวยกจะสูญหายไปในกระบวนการ เพื่อให้เกิดความแตกต่างนี้ ฐานข้อมูลอักขระ Unicode จึงประกอบด้วยแท็กการจัดรูปแบบความเข้ากันได้ที่ให้รายละเอียดเพิ่มเติมเกี่ยวกับการแปลงความเข้ากันได้[1]ในกรณีของตัวอักษรควบ แท็กนี้เป็นเพียง ในขณะ ที่<compat>ตัวยกเป็น<super>มาตรฐาน Rich Text เช่นHTMLจะคำนึงถึงแท็กความเข้ากันได้ ตัวอย่างเช่น HTML ใช้มาร์กอัปของตัวเองเพื่อวางตำแหน่ง U+0035 ในตำแหน่งตัวยก[2]

แบบฟอร์มปกติ

แบบฟอร์มการทำให้เป็นมาตรฐานของ Unicode สี่รูปแบบและอัลกอริธึม (การแปลง) สำหรับการได้รับมีการแสดงอยู่ในตารางด้านล่าง

การทำให้เป็นมาตรฐาน ของ NFD
ในรูปแบบการสลายตัวตามแบบบัญญัติ
อักขระจะถูกแบ่งย่อยตามความเทียบเท่าตามรูปแบบบัญญัติ และอักขระที่รวมกันหลายตัวจะถูกจัดเรียงตามลำดับเฉพาะ
แบบฟอร์มการทำให้เป็นมาตรฐาน ของ NFC
องค์ประกอบที่ยอมรับได้
อักขระจะถูกแบ่งย่อยแล้วจึงจัดองค์ประกอบใหม่ตามความเทียบเท่าตามรูปแบบบัญญัติ
การสลายตัวของแบบฟอร์มการทำให้เป็นมาตรฐานของ NFKD
อักขระจะถูกแบ่งย่อยตามความเข้ากันได้ และอักขระที่รวมกันหลายตัวจะถูกจัดเรียงตามลำดับเฉพาะ
องค์ประกอบความเข้ากันได้ของฟอร์มการทำให้เป็นมาตรฐานของ NFKC
อักขระจะถูกแยกย่อยตามความเข้ากันได้ จากนั้นจึงจัดองค์ประกอบใหม่ตามความเทียบเท่าตามรูปแบบบัญญัติ

อัลกอริธึมทั้งหมดเหล่านี้เป็นการ แปลงแบบ idempotentซึ่งหมายความว่าสตริงที่มีอยู่แล้วในรูปแบบมาตรฐานอย่างใดอย่างหนึ่งเหล่านี้จะไม่ได้รับการแก้ไขหากประมวลผลอีกครั้งด้วยอัลกอริธึมเดียวกัน

แบบฟอร์มปกติจะไม่ปิด ภายใต้ การต่อสายอักขระ[3]สำหรับสตริง Unicode ที่มีข้อบกพร่องที่ขึ้นต้นด้วยสระอังกูลหรือjamo ที่ ต่อท้าย การต่อข้อมูลอาจทำให้องค์ประกอบขาดได้

อย่างไรก็ตาม พวกมันไม่ใช่แบบฉีด (พวกมันแมปร่ายมนตร์และลำดับดั้งเดิมที่แตกต่างกันไปเป็นลำดับมาตรฐานเดียวกัน) และดังนั้นจึงไม่ใช่แบบ bijective (ไม่สามารถกู้คืนได้) ตัวอย่างเช่น สตริง Unicode ที่แตกต่างกัน "U+212B" (เครื่องหมายอังสตรอม "Å") และ "U+00C5" (ตัวอักษรสวีเดน "Å") ทั้งคู่ถูกขยายด้วย NFD (หรือ NFKD) ลงในลำดับ "U+0041 U+030A" (อักษรละติน "A" และวงแหวนรวมที่อยู่เหนือ "°") ซึ่งจากนั้นลดทอนด้วย NFC (หรือ NFKC) เป็น "U+00C5" (ตัวอักษรสวีเดน "Å")

อักขระตัวเดียว (นอกเหนือจากบล็อกพยางค์อังกูล) ที่จะถูกแทนที่ด้วยตัวอื่นภายใต้การทำให้เป็นมาตรฐานสามารถระบุได้ในตาราง Unicode เนื่องจากมีฟิลด์ความเข้ากันได้ที่ไม่ว่างเปล่า แต่ไม่มีแท็กความเข้ากันได้

การสั่งซื้อที่เป็นที่ยอมรับ

การจัดลำดับตามรูปแบบบัญญัติส่วนใหญ่จะเกี่ยวข้องกับการเรียงลำดับของลำดับการรวมอักขระ สำหรับตัวอย่างในส่วนนี้ เราถือว่าอักขระเหล่านี้เป็นตัวกำกับเสียงแม้ว่าโดยทั่วไปแล้วตัวกำกับเสียงบางตัวจะไม่ได้รวมอักขระเข้าด้วยกัน และอักขระที่รวมบางตัวก็ไม่ใช่ตัวกำกับเสียงก็ตาม

Unicode กำหนดคลาสการรวมอักขระ แต่ละตัว ซึ่งระบุด้วยค่าตัวเลข อักขระที่ไม่รวมจะมีคลาสหมายเลข 0 ในขณะที่อักขระที่รวมจะมีค่าคลาสการรวมที่เป็นบวก เพื่อให้ได้ลำดับตามรูปแบบบัญญัติ ทุกสตริงย่อยของอักขระที่มีค่าคลาสการรวมที่ไม่เป็นศูนย์จะต้องเรียงลำดับตามค่าคลาสการรวมโดยใช้อัลกอริธึมการเรียงลำดับที่เสถียรจำเป็นต้องมีการเรียงลำดับที่เสถียร เนื่องจากการรวมอักขระที่มีค่าคลาสเดียวกันจะถือว่ามีการโต้ตอบกันในการพิมพ์ ดังนั้นลำดับที่เป็นไปได้ทั้งสองลำดับจึงไม่ถือว่าเทียบเท่ากัน

ตัวอย่างเช่น อักขระ U+1EBF (ế) ที่ใช้ในภาษาเวียดนามมีทั้งสำเนียงเฉียบพลันและแบบหมวก การสลายตัวตามบัญญัติของมันคือลำดับสามอักขระ U+0065 (e) U+0302 (สำเนียงหมวก) U+0301 (สำเนียงเฉียบพลัน) คลาสการรวมสำหรับทั้งสองสำเนียงคือ 230 ทั้งคู่ ดังนั้น U+1EBF จึงไม่เทียบเท่ากับ U+0065 U+0301 U+0302

เนื่องจากลำดับการรวมไม่ใช่ทั้งหมดจะมีการเทียบเท่ากัน (ลำดับสุดท้ายในตัวอย่างก่อนหน้านี้สามารถลดลงเหลือ U+00E9 U+0302 เท่านั้น) แม้แต่ NFC ในรูปแบบปกติก็ยังได้รับผลกระทบจากพฤติกรรมการรวมอักขระ

ข้อผิดพลาดเนื่องจากความแตกต่างในการทำให้เป็นมาตรฐาน

เมื่อแอปพลิเคชันสองตัวแชร์ข้อมูล Unicode แต่ทำให้เป็นมาตรฐานต่างกัน อาจส่งผลให้เกิดข้อผิดพลาดและการสูญหายของข้อมูลได้ ในกรณีเฉพาะอย่างหนึ่งชื่อไฟล์ Unicode ที่ทำให้OS X เป็นมาตรฐานที่ส่งจาก ซอฟต์แวร์แชร์ไฟล์และเครื่องพิมพ์ของ Samba แซมบ้าไม่รู้จักชื่อไฟล์ที่ถูกแก้ไขซึ่งเทียบเท่ากับชื่อไฟล์ต้นฉบับ ส่งผลให้ข้อมูลสูญหาย[4] [5]การแก้ไขปัญหาดังกล่าวไม่ใช่เรื่องเล็กน้อย เนื่องจากการทำให้เป็นมาตรฐานไม่สามารถย้อนกลับได้อย่างไม่สูญเสีย

ดูสิ่งนี้ด้วย

หมายเหตุ

  1. "UAX #44: ฐานข้อมูลอักขระ Unicode" Unicode.org . สืบค้นเมื่อ 20 พฤศจิกายน 2014 .
  2. "Unicode ใน XML และภาษามาร์กอัปอื่นๆ" Unicode.org ​สืบค้นเมื่อ 20 พฤศจิกายน 2014 .
  3. ^ ต่อ สิ่งที่ควรทำเกี่ยวกับการต่อข้อมูล
  4. "Sourceforge.net". ที่ มา forge.net สืบค้นเมื่อ 20 พฤศจิกายน 2014 .
  5. "rsync, samba, UTF8, ตัวละครสากล โอ้พระเจ้า!" 2552. เก็บถาวรจากต้นฉบับเมื่อวันที่ 9 มกราคม 2010.

อ้างอิง

  • ภาคผนวกมาตรฐาน Unicode #15: แบบฟอร์มการทำให้เป็นมาตรฐานของ Unicode

ลิงค์ภายนอก

  • คำถามที่พบบ่อยเกี่ยวกับ Unicode.org - การทำให้เป็นมาตรฐาน
  • Charlint - เครื่องมือปรับมาตรฐานอักขระที่เขียนด้วยภาษา Perl
Retrieved from "https://en.wikipedia.org/w/index.php?title=Unicode_equivalence&oldid=1215333716"