ไทย

เครื่องมือสำหรับนักพัฒนา · การเปรียบเทียบข้อความ

การพับเคสนั้นยากกว่าที่คิด: 'ละเว้นตัวพิมพ์' หมายถึงอะไรใน Unicode

· พื้นหลัง

ข้อความที่แตกต่าง ยูนิโค้ด คำนึงถึงขนาดตัวพิมพ์

ปุ่มบรรทัดตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมาบรรจบกันในขณะที่รูปแบบพิเศษหนึ่งรูปแบบแยกจากกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

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

การเปรียบเทียบแบบคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ฟังดูเป็นสากลจนกว่าตัวระบุ สคริปต์ และกฎภาษาจะไม่เห็นด้วย กฎที่แท้จริงของ ToolAcre นั้นเป็นรูปธรรม: เมื่อเลือกละเว้นตัวพิมพ์ แต่ละคีย์บรรทัดจะได้รับ JavaScript `toLowerCase()` หลังจากการแปลงช่องว่างใดๆ ความเท่าเทียมกันที่เข้มงวดจะเปรียบเทียบสตริงผลลัพธ์

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

ASCII กรณี: บิตเดียว - อธิบายความสัมพันธ์ระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็กอย่างง่ายที่ทำให้การตั้งค่าสถานะการละเว้นตัวพิมพ์เล็กของเครื่องมือในยุคแรก ๆ เป็นเรื่องง่าย

สมุดงานอธิบายกรณี ASCII ว่าเป็นความสัมพันธ์แบบบิตเดียว แต่แหล่งที่มาไม่ได้ใช้เลขคณิตบิตหรือสาขา ASCII เท่านั้น มันเรียกใช้วิธีสตริงของแพลตฟอร์มในบรรทัดทั้งหมด คำอธิบายการเข้ารหัสในอดีตจำเป็นต้องมีแหล่งที่มานอกเหนือจากพื้นที่เก็บข้อมูลนี้

สำหรับข้อความภาษาละตินพื้นฐาน `Hello` และ `hello` จะเท่ากันภายใต้ตัวเลือก ดังที่ชุดทดสอบพิสูจน์แล้ว การทดสอบนั้นกำหนดลักษณะการทำงานอย่างหนึ่ง ไม่ใช่ทุกการแมป Unicode หลีกเลี่ยงการเปลี่ยนตัวอย่างภาษาอังกฤษที่ผ่านไปแล้วให้เป็นคำมั่นสัญญาเกี่ยวกับสคริปต์ทั้งหมด

การใช้งานเรียก JavaScript toLowerCase; มันไม่เปิดเผยการดำเนินการบิตเฉพาะ ASCII

การพับเคส Unicode เป็นแนวคิดการเปรียบเทียบกับข้อมูลและกฎสถานะของตัวเอง ToolAcre ไม่เรียกไลบรารีการพับที่มีชื่อ ทำให้สตริงเป็นมาตรฐาน หรือจัดทำเอกสารเป็นเวอร์ชัน Unicode การเรียกการดำเนินการนี้ว่า "การพับทั้งกรณี" จะอ้างว่าไม่มีเครื่องจักร

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

ToolAcre ทำการแมปตัวพิมพ์เล็ก ไม่ใช่การดำเนินการพับตัวพิมพ์ Unicode ที่บันทึกไว้

โครงร่างนี้ตั้งชื่อว่า Turkish I, German Sharp s และ Greek Sigma สิ่งเหล่านี้เป็นหัวข้อที่ถูกต้องสำหรับบทความ Unicode ที่มาจากภายนอก แต่พื้นที่เก็บข้อมูลนี้ไม่มีตารางหรือการทดสอบที่รับประกันผลลัพธ์สำหรับบทความเหล่านั้น บทความนี้จงใจหลีกเลี่ยงการประกาศการแมปที่แน่นอน

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

ข้อยกเว้นภาษาที่มีชื่อต้องใช้แหล่ง Unicode ภายนอก และไม่รับประกันที่นี่

เปรียบเทียบ `Release Notes` กับ `release notes` โหมดเข้มงวดรายงานการแทนที่ ละเว้นตัวพิมพ์รายงานบรรทัดที่เหมือนกันและแสดงข้อความต้นฉบับด้านซ้าย เพิ่มเครื่องหมายวรรคตอนหรือการเปลี่ยนแปลงสำเนียง และสังเกตว่าการใช้ตัวพิมพ์เล็กเพียงอย่างเดียวไม่สามารถลบความแตกต่างทั้งหมดได้

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

ตัวอย่างการทำงาน: ทดสอบรูปแบบภาษาละตินทั่วไปโดยไม่ต้องสรุปกับทุกสคริปต์

ไม่มีตัวเลือกสถานที่ปรากฏใน UI และ `toLowerCase` ไม่ได้รับพารามิเตอร์ภาษา ด้วยเหตุนี้ โค้ดการแปลงเดียวกันจึงทำงานโดยไม่คำนึงถึงภาษาที่ต้องการของเอกสาร เส้นทางไม่ทราบว่าบรรทัดเป็นภาษาตุรกี เยอรมัน กรีก หรือตัวระบุการเขียนโปรแกรม

การไม่อยู่นั้นถือเป็นคำเตือนในทางปฏิบัติ สำหรับการค้นหา การจัดเรียง หรือข้อมูลระบุตัวตนโดยคำนึงถึงสถานที่ ให้ใช้ API ที่ออกแบบมาให้สอดคล้องกับข้อกำหนดเหล่านั้น และปักหมุดลักษณะการทำงานด้วยข้อมูลที่เหมาะสม Text diff เป็นจุดสนใจของผู้วิจารณ์บนสองสาย ไม่ใช่นโยบายการตั้งชื่อสากล

ไม่มีการระบุพารามิเตอร์สถานที่โดยตัวเลือกการเปรียบเทียบนี้

บทความนี้ไม่ได้รับประกันความเทียบเท่าที่ไม่ใช่ภาษาลาติน การทำให้เป็นมาตรฐาน การจัดเรียง หรือการรักษาความปลอดภัยจากอักขระที่สับสน ตัวพิมพ์เล็กไม่สามารถตอบได้ว่าชื่อทั้งสองอ้างอิงถึงบุคคล ผลิตภัณฑ์ หรือวัตถุระบบไฟล์เดียวกันหรือไม่ ระบบเหล่านั้นอาจใช้กฎกรณีที่แตกต่างไปจากเดิมอย่างสิ้นเชิง

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

ประเด็นสำคัญ: เพิกเฉยตัวพิมพ์เล็กและใหญ่เพื่อความสะดวก ไม่ใช่เพื่อความถูกต้อง — สรุปว่าตัวเลือกในการเปรียบเทียบข้อความของ ToolAcre เมื่อใดมีความเหมาะสม และเมื่อใดที่ควรตรวจสอบผลลัพธ์

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

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