הבעיה: סדר ויזואלי מול סדר לוגי
טקסט עברי וערבי נכתב ונקרא מימין לשמאל. בזיכרון, Unicode שומר אותו בסדר לוגי - כלומר לפי סדר הקריאה. הבעיה מתחילה כשתוכנה (לרוב מנועי PDF, מערכות ישנות, או ספריות פלט גרפי) שומרת את התווים בסדר שבו הם מצוירים על המסך - מימין לשמאל הופך לרצף משמאל לימין. זה "סדר ויזואלי". כשמערכת אחרת קוראת רצף כזה ומניחה שהוא לוגי, העברית מופיעה הפוכה.
התיקון לרוב המקרים הוא היפוך מבוקר, שהוא בדיוק ההפך של אלגוריתם ה-bidi של Unicode עבור פסקה אחת:
- אם השורה לא מכילה תו RTL בכלל - השאר אותה כמו שהיא (כך מספר טלפון בודד לא "מתוקן" בטעות).
- הפוך את כל השורה.
- הפוך בחזרה כל רצף לטיני/מספרי, כדי שמילים באנגלית ומספרים יישארו קריאים משמאל לימין.
// input (visual order)
"World 123 םולש"
// output (logical order)
"שלום World 123"