ใช้ lang, dir และการประกาศการเข้ารหัสอย่างชาญฉลาด และเอาชนะกับดักการทำ normalization ของ Unicode และทิศทางการอ่าน
เปิดบทเรียนนี้ใน Kodokonแอตทริบิวต์ lang เป็นมากกว่าเมตาดาต้า: มันขับเคลื่อนเสียงของโปรแกรมอ่านหน้าจอ การแบ่งพยางค์ (hyphens: auto ไม่ทำงานหากไม่มีมัน) การเลือกกลิฟ CJK (อักษรภาพเดียวกันถูกวาดต่างกันในภาษาญี่ปุ่นและจีน) เครื่องหมายอัญประกาศที่ <q> สร้างขึ้น และตัวเลือก CSS :lang() มันสืบทอดได้: ประกาศมันบน <html> ด้วยแท็ก BCP 47 (en, en-GB, ja) และแทนที่มันในระดับท้องถิ่นทุกครั้งที่เปลี่ยนภาษา
<html lang="en">
<p>She said: <q>hello</q>.</p>
<p lang="fr">Elle a dit : <q>bonjour</q>.</p>
</html>dir=rtl พลิกการจัดแนวเริ่มต้นและลำดับภาพของอักขระที่มีทิศทางเป็นกลาง สำหรับเนื้อหาผู้ใช้ที่คาดเดาไม่ได้ dir=auto จะเลือกทิศทางตาม อักขระที่มีทิศทางชัดเจนตัวแรก องค์ประกอบ <bdi> แยกส่วนย่อยออกจากอัลกอริทึมสองทิศทาง (bidirectional): หากไม่มีมัน ชื่อผู้ใช้ภาษาอาหรับตามด้วย ": 12 points" จะเห็นเครื่องหมายวรรคตอนของมันถูกจัดเรียงใหม่จนกลายเป็นเรื่องไร้สาระ
<p dir="auto">مرحبا - inferred direction: RTL</p>
<ul>
<li><bdi>مستخدم</bdi>: 12 points</li>
<li><bdi>Alice</bdi>: 8 points</li>
</ul>การประกาศ <meta charset=utf-8> ต้องปรากฏ ภายใน 1024 ไบต์แรก ของเอกสาร: เบราว์เซอร์จะทำการสแกนล่วงหน้า (prescan) ที่จำกัดอยู่ในหน้าต่างนั้นก่อนเลือกการเข้ารหัส หากไม่มีการประกาศและไม่มีส่วนหัว HTTP การเข้ารหัสเริ่มต้นจะขึ้นอยู่กับ locale ของผู้ใช้ (มักเป็น windows-1252 ในยุโรปตะวันตก) - ไม่เคยเป็น UTF-8 อย่างไรก็ตาม BOM ที่จุดเริ่มต้นของไฟล์จะแทนที่ทุกอย่าง รวมถึงส่วนหัว HTTP ด้วย
const composed = "\u00e9";
const decomposed = "e\u0301";
console.log(composed === decomposed); // false
const nfc = decomposed.normalize("NFC");
console.log(composed === nfc); // truemacOS จัดเก็บชื่อไฟล์บางชื่อในรูปแบบที่แยกส่วน (NFD): ดังนั้น "é" ที่มาจากการอัปโหลดจึงอาจต่างจากตัวที่พิมพ์บนแป้นพิมพ์ ทำ normalize อินพุตของผู้ใช้ทั้งหมดให้เป็น NFC อย่างเป็นระบบก่อนจัดเก็บหรือเปรียบเทียบมัน สุดท้าย .length นับหน่วยรหัส UTF-16 ไม่ใช่อักขระที่รับรู้ได้: อีโมจิครอบครัวรวมมันมากกว่าเจ็ดตัว; ใช้ Intl.Segmenter เพื่อนับกราฟีม (grapheme) จริง
<meta charset=utf-8> ต้องตั้งอยู่ที่ไหนอย่างจำเป็น?<head><body>dir=auto กำหนดทิศทางขององค์ประกอบอย่างไร?<html>===?