אורך מחרוזת

מדידת מחרוזת בכמה דרכים משמעותיות בו-זמנית, כולל אמוג'י ועברית.

קלט
תווים
0
נקודות קוד
0
יחידות UTF-16
0
מילים
0
שורות
0

למה ל"כמה ארוכה המחרוזת הזו?" יש יותר מתשובה אחת

זו נשמעת שאלה טריוויאלית, אבל אורך של קטע טקסט תלוי לחלוטין במה שסופרים. אדם סופר את התווים שהוא רואה. מסד נתונים סופר את שטח האחסון שערך תופס. JavaScript סופרת משהו אחר לגמרי. כשהמספרים האלה לא מסכימים — וזה קורה הרבה עבור אמוג'י, אותיות עם ניקוד וכתבים שאינם לטיניים — "אורך" יחיד מטעה. הכלי מציג חמישה מדדים משמעותיים זה לצד זה כדי שתוכל לבחור את המתאים למצב שלך.

חמשת המדדים מוסברים

  • תווים (graphemes): מה שאדם תופס כתו אחד. אמוג'י של משפחה כמו 👨‍👩‍👧, או אות עם סימן ניקוד משולב, נספרים כאחד — זה המדד שתואם ל"בעין".
  • נקודות קוד (code points): מספר ערכי ה-Unicode. תו נראה בודד יכול להיבנות מכמה נקודות קוד מחוברות, ולכן המספר הזה לרוב גבוה יותר ממספר ה-graphemes.
  • יחידות UTF-16: הערך ש-JavaScript מדווחת מהמאפיין .length. תווים מחוץ ל-Basic Multilingual Plane (רוב האמוג'י) תופסים שתי יחידות UTF-16 כל אחד.
  • מילים: מספר האסימונים הדמויי-מילים, בזיהוי מודע ל-Unicode ולא בפיצול נאיבי לפי רווחים.
  • שורות: מספר השורות, בספירת כל מעבר שורה.

למה אמוג'י וניקוד שוברים ספירה נאיבית

טקסט מודרני בנוי מ-Unicode, שמייצג הרבה תווים נראים כרצפים ולא כיחידות בודדות. אמוג'י של דגל הוא שני סמלי אינדיקטור אזוריים. אמוג'י של משפחה הוא כמה דמויות המחוברות בתווי "מחבר ברוחב אפס" בלתי-נראים. é עם ניקוד יכולה להיות נקודת קוד אחת, או e רגילה ואחריה סימן ניקוד משולב. כל אלה נראים כתו אחד אבל יכולים להיספר כשניים, שלושה או יותר תלוי במדד. בדיוק בגלל זה ספירה ידנית, או הסתמכות על מספר אחד, מובילה לבאגים.

באיזה מדד כדאי להשתמש?

  • מגבלות תווים שהמשתמש רואה (ביו, שדה בסגנון ציוץ, תצוגת SMS): השתמש ב"תווים" (graphemes), כי זה תואם למה שהמשתמש סופר.
  • טיפול במחרוזות ב-JavaScript, אינדוקס או חיתוך: השתמש ביחידות UTF-16, כי עליהן מבוססים .length ואינדקסים של מחרוזת.
  • גדלים של עמודות במסד נתונים: בדוק אם העמודה נמדדת בתווים או בבתים — רבות מוגבלות-בתים, ובתים של UTF-8 שונים שוב מכל הספירות האלה.
  • ספירת מילים או שורות לעורכים ולקריאוּת: השתמש במדדי "מילים" ו"שורות".

שאלות נפוצות

איזה מדד תואם ל-length של JavaScript?
הערך "יחידות UTF-16" תואם למאפיין .length הגולמי ב-JavaScript. אם הקוד שלך חותך או מאנדקס מחרוזות, זה המספר שקובע את התנהגותו.
למה אמוג'י אחד נספר ככמה תווים?
הרבה אמוג'י מורכבים מכמה נקודות קוד של Unicode המחוברות יחד. כ-grapheme (מה שרואים) זהו תו אחד, אבל ספירת נקודות הקוד וה-UTF-16 גבוהה יותר, ולכן כל מדד מוצג בנפרד.
האם נספרים רווחים ומעברי שורה בסוף?
כן. כל תו שתדביק נספר, כולל רווחים בהתחלה ובסוף ומעברי שורה. אם הסכומים נראים גבוהים מהצפוי, בדוק אם יש רווחים בלתי-נראים בסוף.
האם הטקסט שלי נשלח לאנשהו?
לא. כל הספירה מתבצעת בדפדפן שלך. הטקסט שתקליד או תדביק לעולם אינו עוזב את המכשיר שלך.
מה זה grapheme?
grapheme, או "אשכול graphemes", הוא תו כפי שהמשתמש תופס אותו — היחידה הקטנה ביותר שקורא היה מכנה תו בודד, גם אם היא בנויה מכמה נקודות קוד.
איך בתים שונים מהספירות האלה?
בתים תלויים בקידוד. ב-UTF-8, אות ASCII היא בית אחד, רוב התווים עם ניקוד והלא-לטיניים הם שניים או שלושה, והרבה אמוג'י הם ארבעה. אף אחד מחמשת המדדים כאן אינו ספירת בתים, אז עבור שדות מוגבלי-בתים כדאי לקודד ל-UTF-8 קודם.