Metin uzunluğu
Bir metni emoji ve İbranice dahil olmak üzere aynı anda birkaç anlamlı biçimde ölçün.
«Bu dize ne kadar uzun?» sorusunun neden birden çok yanıtı var
Önemsiz bir soru gibi görünür, ama bir metin parçasının uzunluğu tümüyle neyi saydığınıza bağlıdır. Bir insan görebildiği karakterleri sayar. Bir veritabanı, bir değerin kapladığı depolamayı sayar. JavaScript ise yine başka bir şey sayar. Bu sayılar uyuşmadığında — ve emoji, aksanlı harfler ve Latin olmayan betikler için sık sık uyuşmaz — tek bir «uzunluk» yanıltıcıdır. Bu araç, durumunuz için önemli olanı seçebilesiniz diye beş anlamlı ölçüyü yan yana gösterir.
Beş ölçünün açıklaması
- Karakterler (grafemler): bir insanın tek karakter olarak algıladığı şey. 👨👩👧 gibi bir emoji ailesi ya da birleştirici aksanlı bir harf tek sayılır — bu, «gözle» sayımıyla eşleşen değerdir.
- Kod noktaları: Unicode skaler değerlerinin sayısı. Görünen tek bir karakter, birbirine bağlanmış birkaç kod noktasından oluşabilir; bu yüzden bu sayı çoğu zaman grafem sayısından yüksektir.
- UTF-16 birimleri: JavaScript'in bir dizenin .length özelliğinden bildirdiği değer. Temel Çok Dilli Düzlem dışındaki karakterler (çoğu emoji) her biri iki UTF-16 birimi kaplar.
- Kelimeler: kelime benzeri belirteçlerin sayısı; boşluklara göre saf bir bölme yerine Unicode duyarlı biçimde algılanır.
- Satırlar: her satır sonunu sayarak, satır sayısı.
Emoji ve aksanlar saf sayımı neden bozar
Modern metin Unicode'dan oluşur; Unicode ise birçok görünen karakteri tek birimler yerine diziler olarak temsil eder. Bir bayrak emojisi iki bölgesel gösterge simgesidir. Bir aile emojisi, görünmez «sıfır genişlikli birleştirici» karakterlerle bağlanmış birkaç kişidir. Aksanlı bir é, tek bir kod noktası ya da düz bir e'nin ardından gelen birleştirici bir aksan olabilir. Bunların her biri tek karakter gibi görünür, ama ölçüye bağlı olarak iki, üç ya da daha fazla sayılabilir. Elle saymanın ya da tek bir sayıya güvenmenin hatalara yol açmasının nedeni tam da budur.
Hangi sayımı kullanmalısınız?
- İnsanların gördüğü karakter sınırları (bir biyografi, tweet tarzı bir alan, bir SMS önizlemesi): Karakterler (grafemler) kullanın, çünkü bu, kullanıcının saydığıyla eşleşir.
- JavaScript dize işleme, dizi indeksleme ya da dilimleme: UTF-16 birimleri kullanın, çünkü .length ve dize indeksleri buna dayanır.
- Veritabanı sütun boyutları: sütununuzun karakterle mi yoksa baytla mı ölçüldüğünü kontrol edin — birçoğu baytla sınırlıdır ve UTF-8 baytları da tüm bu sayımlardan farklıdır.
- Düzenleyiciler ve okunabilirlik için kelime ya da satır sayıları: Kelimeler ve Satırlar ölçülerini kullanın.
Sıkça sorulan sorular
- Hangi sayım JavaScript'in dize uzunluğuyla eşleşir?
- UTF-16 birimleri değeri, JavaScript'teki ham .length özelliğiyle eşleşir. Kodunuz dizeleri dilimliyor ya da indeksliyorsa, davranışını yöneten sayı budur.
- Neden bir emoji birkaç karakter olarak sayılıyor?
- Birçok emoji, birbirine bağlanmış birkaç Unicode kod noktasından oluşur. Grafem olarak (gördüğünüz şey) tek bir karakterdir, ama kod noktası ve UTF-16 sayıları daha yüksektir; her ölçünün ayrı gösterilmesinin nedeni budur.
- Sondaki boşlukları ve satır sonlarını sayar mı?
- Evet. Yapıştırdığınız her karakter, baştaki ve sondaki boşluklar ile satır sonları dahil sayılır. Toplamlarınız beklenenden yüksek görünüyorsa, görünmez sondaki boşlukları kontrol edin.
- Metnim herhangi bir yere gönderiliyor mu?
- Hayır. Tüm sayım tarayıcınızda gerçekleşir. Yazdığınız ya da yapıştırdığınız metin cihazınızdan asla çıkmaz.
- Grafem nedir?
- Bir grafem, ya da «grafem kümesi», kullanıcının algıladığı bir karakterdir — birkaç temel kod noktasından oluşsa bile, bir okurun tek karakter diyeceği en küçük birim.
- Baytlar bu sayımlardan nasıl farklıdır?
- Baytlar kodlamaya bağlıdır. UTF-8'de bir ASCII harfi bir bayt, çoğu aksanlı ve Latin olmayan karakter iki ya da üç, birçok emoji ise dört bayttır. Buradaki beş ölçünün hiçbiri bir bayt sayımı değildir; bu yüzden baytla sınırlı alanlar için önce UTF-8'e kodlamalısınız.