ชื่อเพลงภาษาอาหรับของคุณไม่ได้เสียหาย ร้านค้ากำลังอ่านมันในทิศทางอื่น

8 นาทีในการอ่านทุกตัวเลขมีแหล่งที่มา

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

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

ลำดับเชิงตรรกะกับลำดับการแสดงผลเป็นคนละเรื่องกัน

Unicode จัดเก็บข้อความใน ลำดับเชิงตรรกะ คือลำดับที่คุณพูด พิมพ์และอ่านออกเสียง ลำดับการแสดงผลถูกคำนวณจากลำดับนั้นตอนเรนเดอร์ ด้วย Unicode Bidirectional Algorithm ที่นิยามไว้ใน Unicode Standard Annex #9 (UAX #9) ภาคผนวกนี้พูดถึงการแยกสองอย่างนี้อย่างตรงไปตรงมาว่า "The Unicode Standard prescribes a memory representation order known as logical order," และ "When working with bidirectional text, the characters are still interpreted in logical order—only the display is affected."

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

ทำไมคำละตินภายในสตริงขวาไปซ้ายจึงย้ายที่

UAX #9 ให้ประเภททิศทางสองทางแก่อักขระทุกตัว ตัวอักษรอาหรับ เปอร์เซียและอูรดูเป็น AL (ตัวอักษรอาหรับที่อ่านขวาไปซ้าย) ตัวอักษรละตินเป็น L เลข ASCII เป็น EN (European Number) เลขอาหรับ-อินดิกเป็น AN (Arabic Number) ช่องว่างและเครื่องหมายวรรคตอนส่วนใหญ่ รวมถึงวงเล็บกลม วงเล็บเหลี่ยม ยัติภังค์และมหัพภาค เป็น กลาง หมายความว่ามันไม่มีทิศทางของตัวเองและรับทิศทางมาจากสิ่งที่อยู่รอบข้าง

กฎสองกลุ่มคือตัวก่อความเสียหาย

ทิศทางย่อหน้า กฎ P2–P3 อัลกอริทึมกวาดหาอักขระบอกทิศทางที่ แข็งตัวแรก แล้วตั้งทิศทางฐานจากตัวนั้น ชื่อเพลงที่ขึ้นต้นด้วยคำละตินจะได้ทิศทางฐานซ้ายไปขวา แม้ทุกอย่างหลังจากนั้นจะเป็นภาษาเปอร์เซียก็ตาม

การแก้ทิศทางของอักขระกลาง กฎ N1–N2 กฎ N1 ระบุว่า "A sequence of [neutrals] takes the direction of the surrounding strong text if the text on both sides has the same direction." ส่วนกฎ N2 ระบุว่าอักขระกลางที่ไม่มีฉันทามติจะรับทิศทางของย่อหน้า จากนั้นกฎ L2 จัดลำดับใหม่เพื่อการแสดงผล คือ "reverse any contiguous sequence of characters that are at that level or higher."

เอาสิ่งเหล่านั้นมารวมกัน แล้วความล้มเหลวจะเป็นสิ่งที่กำหนดได้แน่นอน ไม่ใช่เรื่องสุ่ม คำละตินหนึ่งคำ ไม่ว่าจะเป็นชื่อผู้รีมิกซ์ คำว่า feat. คำว่า Vol. 2 เลขแคตตาล็อกหรือปี จะอยู่ที่ระดับการฝังตัวคนละระดับกับข้อความอาหรับรอบ ๆ มัน อักขระกลางที่ขอบของมัน คือช่องว่างและวงเล็บเปิด มีอาหรับอยู่ด้านหนึ่งและละตินอยู่อีกด้านหนึ่ง N1 จึงไม่พบฉันทามติ และ N2 ก็ยื่นทิศทางของย่อหน้าให้มัน วงเล็บที่แก้ทิศทางไปทางหนึ่งในโปรแกรมแก้ไขข้อความขวาไปซ้ายของคุณ จะแก้ไปอีกทางหนึ่งบนหน้าเว็บร้านค้าที่เป็นซ้ายไปขวา แล้ววงเล็บก็หลุดออกและพลิกกลับ

ดังนั้น نام آهنگ (Nima Remix) ไม่ได้พัง มันคือสตริงเดียวที่ถูกแก้ทิศทางในสองบริบท ทิศทางฐานคือบริบท ไม่ใช่เนื้อหา และบริบทของร้านค้าไม่ใช่บริบทของคุณ

สิ่งเดียวที่คุณต้องไม่ทำเด็ดขาด

อย่า "แก้" การแสดงผลด้วยการพิมพ์อักขระย้อนกลับจนกว่าตัวอย่างจะดูถูกต้อง

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

UAX #9 นิยามอักขระสำหรับควบคุมเรื่องนี้อย่างชัดแจ้งไว้จริง คืออักขระแยกส่วน LRI, RLI, FSI และ PDI และเครื่องหมาย LRM, RLM และ ALM มันคือวิธีแก้ที่ถูกต้องในทางเทคนิค และมันก็เป็นอักขระจัดรูปแบบที่มองไม่เห็นด้วย และท่อส่งข้อมูลจำนวนมากตัดอักขระจัดรูปแบบที่มองไม่เห็นทิ้งโดยไม่บอกคุณ ให้ถือว่ามันไม่น่าเชื่อถือในช่องเมทาดาทา

วิธีแก้เชิงโครงสร้าง เอาคำละตินออกจากตรงกลาง

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

  • ใช้ช่องแยกแทนสตริงที่ผสมทิศทาง ทุกที่ที่โมเดลข้อมูลเปิดให้ทำ ศิลปินรับเชิญควรอยู่ที่ระดับบทบาทศิลปิน ไม่ใช่ในชื่อเพลง Music Metadata Style Guide ของ Music Biz แนะนำให้ให้เครดิตศิลปินรับเชิญที่ระดับบทบาทศิลปิน และไม่ให้เพิ่มข้อมูลนั้นลงในชื่อแทร็กหรือชื่อการปล่อยผลงานอัลบั้ม ส่วนคำแนะนำสาธารณะของ Spotify คือ "You shouldn't include any artists' names in your track or release titles." เวอร์ชันควรอยู่ในช่องเวอร์ชัน ซึ่งงานทั้งหมดของมันคือการแยกบันทึกเสียงสองชิ้นที่ใช้ชื่อเดียวกัน ทุกคำละตินที่คุณย้ายไปอยู่ในช่องของมันเอง คือขอบเขตสองทิศทางหนึ่งจุดที่เลิกมีอยู่
  • เก็บคำละตินที่เลี่ยงไม่ได้ให้พ้นจากตำแหน่งแรก ตำแหน่งแรกกำหนดทิศทางย่อหน้าตามกฎ P2–P3 ชื่อเพลงเปอร์เซียที่เปิดด้วยคำละตินคือย่อหน้าซ้ายไปขวาซึ่งมีภาษาเปอร์เซียอยู่ข้างใน ซึ่งไม่ใช่สิ่งที่คุณตั้งใจ
  • หลีกเลี่ยงเครื่องหมายวรรคตอนเชิงตกแต่งที่ขอบทิศทาง ขีดยาว ทับ ขีดตั้งและวงเล็บซ้อนกันล้วนเป็นอักขระกลางที่นั่งอยู่ตรงจุดที่อัลกอริทึมมีข้อมูลน้อยที่สุดพอดี

ในที่ที่สัญญากำหนดให้ต้องมีการระบุเครดิตในชื่อเพลงจริง ๆ ธรรมเนียมนั้นตายตัวและควรค่าแก่การทำตามอย่างเคร่งครัด Music Biz ว่าด้วย "feat." และ "with" ระบุว่า "when included in the title are generally lowercase and in English." ส่วนคู่มือรูปแบบของ Apple ระบุว่า "Formatting of 'feat.' and 'with' must be lowercase, in English, not localized, and in parentheses or brackets." คำสั่ง "not localized" นั้นทำงานจริงจังตรงนี้ อย่าแปลคำว่า "feat." เป็นภาษาอาหรับ เปอร์เซียหรืออูรดูในช่องชื่อเพลง มันคือโทเคนที่เครื่องอ่าน ไม่ใช่คำ

ตัวเลข และทำไมตัวเลขของคุณอาจไม่ใช่ตัวเลขที่คุณคิด

มีชุดตัวเลขสามชุดที่เกี่ยวข้อง

ชุดจุดรหัสใช้ในคลาสสองทิศทาง
ASCII0–9ทุกที่EN
อาหรับ-อินดิกU+0660–U+0669 (٠١٢٣٤٥٦٧٨٩)ภาษาอาหรับAN
อาหรับ-อินดิกขยายU+06F0–U+06F9 (۰۱۲۳۴۵۶۷۸۹)เปอร์เซีย อูรดูEN

สิ่งเหล่านี้ไม่ใช่รูปแบบตกแต่งที่ต่างกัน มันคือจุดรหัสคนละจุด และตามฐานข้อมูลอักขระ Unicode มันไม่ได้แม้แต่จะใช้คลาสทิศทางสองทางร่วมกัน กฎ W2 ของ UAX #9 เปลี่ยนประเภทของเลขยุโรปให้เป็นเลขอาหรับเมื่ออักขระแข็งที่อยู่ก่อนหน้าใกล้ที่สุดเป็นตัวอักษรอาหรับ ดังนั้นภายในข้อความเปอร์เซียทั้งสองอาจทำตัวเหมือนกันตอนแสดงผล แต่ไม่มีวันเหมือนกันในการเรียงลำดับ การค้นหาหรือการเปรียบเทียบสตริง เพราะมันเป็นอักขระคนละตัว คำว่า "Vol. 2" ที่พิมพ์ด้วยเลข ۲ แบบอาหรับ-อินดิกขยาย กับคำว่า "Vol. 2" ที่พิมพ์ด้วยเลข 2 แบบ ASCII คือสองสตริงที่ต่างกันซึ่งดูแทบจะเหมือนกัน

เลือกชุดตัวเลขหนึ่งชุดต่อหนึ่งแคตตาล็อก และอย่าผสมชุดกันภายในสตริงเดียวเด็ดขาด

วิธีตรวจว่าคุณพิมพ์อะไรลงไปจริง ๆ

การแสดงผลเชื่อไม่ได้ ดังนั้นให้ตรวจที่ไบต์ มีสามสิ่งที่ควรทำก่อนการส่งมอบทุกครั้ง

  1. อ่านสตริงในรูปจุดรหัส ไม่ใช่ในรูปกลิฟ เครื่องมือใดก็ตามที่แสดงค่า U+ ให้คุณจะบอกคุณได้ทันทีว่านั่นคือ ی เปอร์เซีย (U+06CC) หรือ ي อาหรับ (U+064A) คือ ک เปอร์เซีย (U+06A9) หรือ ك อาหรับ (U+0643) ซึ่งเป็นความต่างที่ฟอนต์ส่วนใหญ่กลบเรียบและไม่มีผู้พิสูจน์อักษรคนใดมองเห็น เช่นเดียวกันกับตัวยืดคำ tatweel (U+0640) ที่หลงเข้ามา ซึ่งไม่มีรูปแบบการทำให้เป็นบรรทัดฐานของ Unicode แบบใดกำจัดมันออก และกับตัวไม่เชื่ออักษรความกว้างศูนย์ (U+200C) ที่ช่องกรอกข้อมูลกลืนหายไปอย่างเงียบ ๆ
  2. วางชื่อเพลงลงในบริบทซ้ายไปขวาและบริบทขวาไปซ้าย แล้วเปรียบเทียบ หากเครื่องหมายวรรคตอนไปตกคนละที่ในสองบริบทนั้น แปลว่าคุณมีสตริงผสมทิศทางและมีคำละตินที่ควรอยู่ในช่องของมันเอง
  3. เทียบกับการปล่อยผลงานครั้งก่อนของคุณ ทีละอักขระ ไม่ใช่ด้วยสายตา แคตตาล็อกอักษรอาหรับที่ถูกแยกออกจากกัน แทบทุกครั้งเกิดจากความต่างที่มองไม่เห็น คือผลงานชุดหนึ่งพิมพ์บนผังแป้นพิมพ์เปอร์เซีย ส่วนชุดถัดไปพิมพ์บนผังอาหรับ

เครื่องมือของ Mazufa ทำงานในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดไฟล์เสียงและไม่มีการอัปโหลดข้อความ และมันตั้งค่า dir="rtl" โดยอัตโนมัติเมื่อชื่อเพลงเป็นขวาไปซ้าย เพื่อให้สิ่งที่คุณเห็นขณะพิมพ์ตรงกับบริบทที่สตริงนั้นถูกเขียนขึ้นมาเพื่อมัน mazufa.com ยังมีเครื่องมือตรวจเมทาดาทาฟรีที่ทำงานบนอุปกรณ์ของคุณเอง และแจ้งเตือนกรณีที่มองไม่เห็นหลายกรณี ได้แก่ชุดตัวเลขที่ผสมกัน tatweel ZWNJ ที่หลงเข้ามาหรือขาดหายไป เยห์และคาฟแบบอาหรับเทียบกับแบบเปอร์เซีย และสตริงที่ไม่ใช่ NFC

สิ่งที่ควรทำก่อนส่งมอบ

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

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

แหล่งข้อมูล

  • Unicode Standard Annex #9, Unicode Bidirectional Algorithm (Revision 51, Unicode 17.0.0, 2025-08-13) — https://www.unicode.org/reports/tr9/
  • Unicode Standard Annex #15, Unicode Normalization Forms (Version 57, Unicode 17.0.0, 2025-07-30) — https://www.unicode.org/reports/tr15/
  • Unicode Character Database — คุณสมบัติของอักขระ ได้แก่คลาสทิศทางสองทางและการจับคู่การแยกส่วน — https://www.unicode.org/ucd/
  • Music Business Association, Music Metadata Style Guide v2.1 — https://www.musicbiz.org/wp-content/uploads/2016/04/MusicMetadataStyleGuide_V2.1.pdf
  • Apple Music Style Guide — https://help.apple.com/itc/musicstyleguide/en.lproj/static.html
  • Spotify for Artists, Music metadata guidelines — https://support.spotify.com/us/artists/article/metadata-formatting-guidelines/

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

เครื่องมือฟรี

เครื่องมือทุกชิ้นที่ Mazufa สร้างทำงานในเบราว์เซอร์ของคุณ ไม่มีค่าใช้จ่าย และไม่ต้องมีบัญชี

เปิดชุดเครื่องมือ ⇥