เหตุใดฉันจึงไม่ควรใช้อักขระ Unicode เพื่อจำลองลักษณะการพิมพ์ (เช่นตัวพิมพ์เล็กหรือสคริปต์)


129

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

  • หมวกใบเล็ก:

    ʙᴇʜᴏʟᴅᴛʜɪꜱꜰᴀɴᴄɪʟyᴇɴᴄᴏᴅᴇᴅᴛᴇxᴛ

  • สคริปต์:

    𝓑𝓮𝓱𝓸𝓵𝓭𝓽𝓱𝓲𝓼𝓯𝓪𝓷𝓬𝓲𝓵𝔂𝓮𝓷𝓬𝓸𝓭𝓮𝓭𝓽𝓮𝔁𝓽

  • blackletter:

    𝕭𝖊𝖍𝖔𝖑𝖉𝖙𝖍𝖎𝖘𝖋𝖆𝖓𝖈𝖎𝖑𝖞𝖊𝖓𝖈𝖔𝖉𝖊𝖉𝖙𝖊𝖝𝖙

นี้พบกับดอกเบี้ย Stack แลกเปลี่ยน (เช่นที่นี่ , ที่นี่และที่นี่ ) และการวิจารณ์ของเทคนิคดังกล่าวถูกสร้างขึ้นมา แต่จะมีอะไรผิดปกติเมื่อฉันใช้มัน?


224
ฉันกำลังอ่านข้อความนี้จากโทรศัพท์ของฉันและฉันไม่เห็นข้อความแฟนซีสองอันสุดท้าย
Scimonster

22
เพราะมันไม่สามารถอ่านได้ในอุปกรณ์บางอย่าง: i.stack.imgur.com/kM73J.png
Chris Kent

15
เนื่องจากเราบางคนต้องการเห็นหน้าเว็บในสิ่งที่เราพิจารณาว่าเป็นแบบอักษรที่อ่านได้ (และขนาดสีและ & c) ดังนั้นเราจึงใช้ตัวอย่างสไตล์ชีต CSS ของผู้ใช้เพื่อแทนที่สไตล์ผู้เขียน คุณอาจทราบว่าแม้ว่าตัวอย่างทั้งสามของคุณจะแสดงบนอุปกรณ์ของฉันดูเหมือนว่าคุณตั้งใจที่จะให้พวกเขาปรากฏ แต่สำหรับฉันแล้วพวกเขาสามารถอ่านได้ในแนวเขต ทำไมคุณถึงอยากให้งานศิลปะของคุณเหนือความสะดวกในการอ่านของผู้อ่าน?
jamesqf

38
นี่คือข้อสังเกตที่น่าสนใจ: Edge ไม่สามารถค้นหาข้อความในตัวอย่างหลังสองและ Chrome ไม่สามารถค้นหาข้อความในตัวอย่างแรก (ลอง Ctrl + F'ing เพื่อ BEHOLD ในเบราว์เซอร์ทั้งสอง) ยังไม่ได้ตรวจสอบ Firefox
Schism

22
@Schism Firefox ไม่พบใครเลย ดูเหมือนว่า Chrome อาจใช้การปรับสภาพ NFKC / NFKD ก่อนการค้นหาซึ่งจะย่อยสลายสคริปต์และข้อความตัวอักษรสีดำเป็นภาษาละตินขั้นพื้นฐาน Firefox ดูเหมือนจะไม่ทำเช่นนั้น Edge ... กำลังทำอะไรแปลก ๆ
บ๊อบ

คำตอบ:


224

ทั่วไป

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

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

ตัวอย่างที่เฉพาะเจาะจง

การเข้าถึง

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

𝓽𝓱𝓮

มีขึ้นเพื่อเป็นบทความที่ชัดเจนหรือผลิตภัณฑ์ทางคณิตศาสตร์2ของตัวแปร𝓽, 𝓱และ𝓮 - ซึ่งเป็นสิ่งที่ตัวละครเหล่านั้นถูกสร้างขึ้นมาเพื่อ พฤติกรรมที่ดีที่สุดคือการทำให้คาถาอักขระเหล่านี้เช่นพูดตามตัวอักษร:

สคริปต์ตัวหนาขนาดเล็ก t, ตัวหนาสคริปต์ขนาดเล็ก h, ตัวหนาสคริปต์ขนาดเล็ก e

ไม่ควรเพียงแค่พูดว่า“ the” แทนเพราะเมื่อนั้นมันจะไม่ถูกต้องอ่านตำราคณิตศาสตร์ที่มีสัญลักษณ์เกิดขึ้นเพื่อสร้างคำที่ออกเสียงได้ 3

ความเบา

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

แต่แม้ว่าเครื่องของผู้อ่านจะใช้แบบอักษรที่แตกต่างกันเท่านั้น แต่อาจทำให้ข้อความอ่านง่ายขึ้น สำหรับตัวอย่างแรกสิ่งนี้แสดงด้วยฟอนต์ที่แตกต่างกันสองแบบ:

𝓉𝒽ℯแสดงผลด้วย FreeSerif และ STIX

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

ในตัวอย่างที่สองสมมติว่าคุณหรือผู้อ่านเป็นตัวเอียงว่า“ ว่าง” ด้วยเหตุผลบางอย่าง ด้วยตัวอักษรที่ดีคุณจะได้รับ4 :

สามารถแสดงผลในแนวตั้งและตัวเอียง  ตัวเอียงอ่านว่า "หลั่งบาร์ของฉัน"

เหตุผลของเรื่องนี้ก็คือว่าแคปเล็ก ๆ (บางส่วน) จำลองด้วยตัวอักษรซีริลลิและตัวเอนริลลิกบางครั้งมีลักษณะแตกต่างจากคู่ของพวกเขาตรง ดังนั้นอีกครั้งนี่เป็นพฤติกรรมที่เหมาะสม

searchability

เป็นตัวอย่างแรกพิจารณาสิ่งที่คุณต้องการให้การค้นหาที่สมเหตุสมผลทำกับอักขระ𝒲 (สคริปต์ทางคณิตศาสตร์W ) สมมติว่าการค้นหามีสองโหมดคือโหมดเริ่มต้นและโหมดที่แน่นอน (ปกติเรียกว่าตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ) ตัวละครนี้ควรจะ:

  • พบเมื่อค้นหาwหรือWในโหมดเริ่มต้น - สำหรับผู้ที่ไม่ต้องการรบกวนการป้อนหรือคัดลอกวางอักขระพิเศษลงในช่องค้นหา

  • พบเมื่อค้นหา𝒲ในโหมดที่แน่นอน - สำหรับผู้ที่ต้องการค้นหาตำแหน่งที่กล่าวถึงตัวแปรที่เกี่ยวข้องในเอกสารทางคณิตศาสตร์³;

  • ไม่พบเมื่อทำการค้นหา𝓌, wหรือWในโหมดที่แน่นอนเนื่องจากการแยกการค้นหาคล้ายกับด้านบน

อย่างไรก็ตามหากคุณใช้อักขระนี้เพื่อจำลองข้อความปกติควรจะพบเมื่อค้นหาWหรือ𝒲ในโหมดที่แน่นอนซึ่งขัดแย้งกับข้างต้น

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

ตัวเลือกการค้นหาที่แน่นอนไม่สามารถแก้ปัญหานี้ได้เนื่องจากเป็นการสำรองไว้เพื่อวัตถุประสงค์อื่นในตัวอักษรเหล่านั้น

โดยทั่วไปแล้วมันเป็นไปไม่ได้ที่จะสร้างการค้นหา (โดยไม่มีตัวเลือกจำนวนบ้า) ที่ไม่ขาดโดยใช้ตัวอักษรพิเศษเพื่อจำลองข้อความละตินสไตล์


1  คุณรู้ไหมว่า XKCD เกี่ยวกับความล้มเหลวอย่างหลีกเลี่ยงไม่ได้ของมาตรฐานการรวม ? ยูนิโคดประสบความสำเร็จ
2  หรืออะไรก็ตามที่โอเปอเรเตอร์ว่างอยู่ในการประชุมที่เกี่ยวข้อง
3  ฉันทราบว่าปัจจุบันมีข้อความทางคณิตศาสตร์น้อยมากที่สนับสนุนการเข้ารหัสนี้หรือบางสิ่งที่เข้ากันได้กับประเด็นนี้ แต่ประเด็นก็คือว่าบางวัน ข้อความที่ดูถูกเหยียดหยาม Unicode ของคุณอาจยังอ่านอยู่
4  หากคุณไม่ได้แปลภาษามาซิโดเนียหรือเซอร์เบียเป็นภาษาท้องถิ่นซึ่งคุณจะได้รับผลลัพธ์ที่แตกต่างกัน แต่ก็ยังไม่เป็นที่ต้องการ


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Geek

1
ตัวอย่างที่สามเป็นอย่างไร เหตุใดข้อความ Blackletter จึงมีอยู่ใน Unicode เมื่อเทียบกับแบบอักษรบางตัวเท่านั้น
posfan12

2
@ posfan12: มันใช้เป็นตัวอักษรทางคณิตศาสตร์ที่แตกต่าง - เช่นตัวละครสคริปต์ (โปรดทราบว่าตัวอย่างการกำหนดหมายเลขที่นี่ไม่มีส่วนเกี่ยวข้องกับสัญลักษณ์หัวข้อย่อยในคำถาม)
Wrzlprmft

3
ตัวอย่างเล็ก ๆ -CPAs ของคุณแสดงให้เห็นปริศนา / competitoin: หาประโยคที่ถูกต้องที่จะกลายเป็นประโยคที่แตกต่างกันเมื่อเอียง ... (ทั้งตีความโดยผู้อ่าน latin-based ของมนุษย์กล่าวว่า)
ฮาเจนฟอน Eitzen

67

มีอะไรผิดพลาด? ฉันเห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ใน Firefox 50.1.0 บน Windows 7

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

ป้อนคำอธิบายรูปภาพที่นี่

และผู้ใช้oalsกรุณาสนับสนุนอีกตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่



7
@Lilienthal ฉันประทับใจกับจำนวนปีที่คุณต้องไปโดยไม่ตรวจสอบหรือติดตั้งการอัปเดต ฉันหมายถึงฉันยังคงใช้บางสิ่งที่ใช้ Firefox 3.5 กับอุปกรณ์บางอย่าง แต่ฉันไม่มีทางเลือกในเรื่องนี้ (อุปกรณ์ดีเกินไป แต่ไม่มีเบราว์เซอร์ที่ใช้งานได้ใหม่)
mtraceur

16
@Lilienthal บางครั้งในปี 2020 หมายเลขรุ่นหลักของ Firefox อาจต้องใช้หมายเลข 64 บิต หลังจากนั้นไม่นานหมายเลขเวอร์ชั่นจะใช้พื้นที่มากกว่าโปรแกรมจริง ในความพยายามที่จะฟื้นส่วนแบ่งการตลาดหมายเลขรุ่นของ Chrome จะต้องมีดาวเคราะห์ทั้งหมดเพื่อจัดเก็บ
Andrew Morton

2
ผู้คนมีความคิดว่ามีช่องโหว่ด้านความปลอดภัยที่รู้จักและใช้งานอยู่ที่คุณเปิดเผยด้วยการใช้เบราว์เซอร์โบราณเหล่านี้หรือไม่?
Zach Lipton

3
@ Zach Lipton: คุณรู้หรือไม่ว่ามันเป็นเรื่องสำคัญในรายการของฉัน # 1 มีบางสิ่งที่ฉันสามารถใช้งานได้จริง แม้ว่าคน Firefox (และอื่น ๆ อีกมากมาย) อาจใช้กระบวนทัศน์ใหม่: การรักษาความปลอดภัยผ่านการใช้งานไม่ได้
jamesqf

29

ฉันมีปัญหา XY กับสิ่งนี้

Y และ X ปรากฏน้อยกว่าข้อความที่เหลือ

ที่นี่เราเห็นว่า Y และ X มีขนาดเล็กกว่าข้อความที่เหลือ ในระดับการซูมบางขนาดดูเหมือนว่าจะมีขนาดเท่ากัน แต่ดูเหมือนว่าจะมีปัญหากับร่ายมนตร์เฉพาะเหล่านี้ในแบบอักษรนี้


ฉันสามารถให้คำอธิบายที่เป็นไปได้สามสิ่งที่คุณเห็น: 1) Bad เค้า 2) ฟอนต์ทางเลือกใช้สำหรับทุกอย่างยกเว้นxและy 3) การออกแบบตัวอักษรที่ไม่ดี: ตัวพิมพ์เล็กถูกออกแบบให้มีขนาดใหญ่กว่าตัวอักษรตัวเล็ก (ซึ่งเป็นตัวเลือกที่ถูกต้อง) จากนั้นใช้สำหรับการออกเสียงแบบอักษรและ Cyrillic Unicode - ซึ่งไม่ใช่ตัวเลือกที่ดีเช่นในการใช้สัทศาสตร์ ต้องกลมกลืนกับตัวอักษรละตินพื้นฐาน - ไม่ว่าด้วยวิธีใด: คะแนน 1) และ 3) ไม่ได้เกิดจากการใช้ Unicode ในทางที่ผิด ประเด็นที่ 2) ได้รับการแก้ไขแล้วในคำตอบอื่น ๆ
Wrzlprmft

12
@Wrzlprmft: โดยคำจำกัดความพวกเขาเป็นการละเมิด Unicode เพราะยูนิโคดไม่มีแคปขนาดเล็ก สิ่งที่ Unicode มีคือตัวอักษรที่ดูเหมือนตัวพิมพ์เล็กในบล็อกตัวอักษรออกเสียงและบล็อกละตินส่วนขยาย -D โดยเฉพาะบล็อก Phonetic สองตัวหรือ Latin Extended-D block ไม่ได้บรรจุตัวอักษรที่ดูเหมือนตัวพิมพ์เล็กXดังนั้นฉันเดาว่าXมาจากที่อื่นซึ่งอาจเป็น Cyrillic block ความแตกต่างเกิดจากทั้ง 1, 2 และ 3 มันเกิดจากตัวอักษรที่เป็นของตัวอักษรอื่น
slebetman

@slebetman: ตัวพิมพ์เล็กxเป็นเพียงตัวพิมพ์เล็กxปกติ(คุณสามารถคัดลอกตัวละครจากคำถามและตรวจสอบด้วยตัวคุณเอง) และตัวพิมพ์เล็กxต้องกลมกลืนกับอักขระการออกเสียงเนื่องจากมันยังใช้เป็นอักขระออกเสียง นอกจากนี้ยังควรมีความสูงเท่ากับอักขระตัวพิมพ์เล็ก Cyrillic เนื่องจากคุณไม่ต้องการให้คำ Cyrillic คำเดียวโดดเด่นจากข้อความภาษาละติน (และในทางกลับกัน)
Wrzlprmft

19
โหวตให้ lol ที่ "ปัญหา XY" :)
Andrew Morton

13

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

หากคุณสบายในคลับนั้นไปเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.