Bir başvuru formu 250 kelime, bir ilan 160 karakter, bir aktarım sistemi ise belirli sayıda bayt isteyebilir. Bunlar aynı sınır değildir. Kısa görünen bir emoji birden fazla kod noktasından oluşabilir; Türkçe bir harf UTF-8 kodlamasında birden fazla bayt kullanabilir. Bu hesaplayıcı, metninizi değiştirmeden farklı sayımları yan yana gösterir. Böylece hangi satırın kullanacağınız sınırla ilişkili olduğunu seçebilirsiniz.

Ana sonuç Türkçe kelime sayısıdır. Altında boşluk dahil ve hariç görünen karakter kümeleri, Unicode kod noktaları, UTF-16 kod birimleri, UTF-8 baytları, mantıksal satırlar ve paragraflar bulunur. Metni kutuya yapıştırıp hesapladıktan sonra yalnızca büyük sayıya bakmayın. Bir platformun açıklamasında “karakter” yazması, onun bu araçtaki her karakter satırıyla aynı yöntemi kullandığını garanti etmez.

Önce kullanacağınız sınırı belirleyin

Bir yazı ödevinde kelime sınırı varsa kelime sonucunu esas alın, fakat teslim sisteminin kendi sayacını da son kontrol olarak kullanın. Bir form karakter sınırlıyorsa boşlukların dahil olup olmadığını ve emojileri nasıl değerlendirdiğini öğrenin. Bir veritabanı ya da dosya aktarımı bayt sınırı koyuyorsa UTF-8 baytı satırı daha ilgili olabilir. Her durumda sistemin tanımladığı ölçü, genel “uzunluk” ifadesinden daha açıklayıcıdır.

Örneğin “Merhaba dünya.” metni iki kelimedir. Noktalama dahil 14 görünen karakter kümesi ve 14 Unicode kod noktası vardır. Türkçe ü harfi iki UTF-8 baytı kullandığından metnin UTF-8 karşılığı 15 bayttır. Aynı metin için çıkan bu farklı sayılar birbirini yanlışlamaz. Biri dildeki bölümlere, biri karakter kümelerine, diğeri kodlama sırasında kullanılan birimlere bakar.

Kelime sayımı nasıl yapılır?

Araç tarayıcının Intl.Segmenter özelliğini Türkçe dil seçimiyle kullanır. Kelime bölümlemesinde kelime benzeri olarak işaretlenen parçalar sayılır. Harf içeren sözcükler ve sayı benzeri bölümler bu yöntemle değerlendirilirken yalnız boşluk veya tek başına noktalama işareti ana kelime sayısını artırmaz. Bu nedenle metni yalnız boşluklara bölüp parça saymakla aynı sonuç her metinde elde edilmez.

Türkçe seçim, metnin içindeki bütün sözcüklerin Türkçe olduğu iddiası değildir; bölümleme için istenen dil ayarıdır. Farklı alfabelerden parçalar, sayılar, internet adresleri ve kesme işaretleri tarayıcının bölümleme kurallarıyla işlenir. Araç metnin anlamını yorumlamaz, yazımını düzeltmez ve cümlede doğru kullanılıp kullanılmadığını incelemez. Bir sayacın sonucundan metnin dili, kalitesi veya doğruluğu çıkarılamaz.

Kelime sınırları konusunda bütün editörlerin tek bir evrensel sözleşmesi bulunmaz. Tireli sözcükler, kısaltmalar, URL, e-posta adresi ve sayı içindeki işaretler farklı uygulamalarda farklı değerlendirilebilir. ECMA-402, dil seçimine bağlı kelime benzeri bölüm tanımını açıklar; tarayıcıların kullandığı Unicode verisi de zamanla değişebilir. Önemli bir teslimde yöntemi belirtmek ve alıcı sistemde son sayımı yapmak bu farkı yönetir.

Görünen karakter neden yaklaşık sayılır?

Ekranda tek bir işaret gibi algıladığınız yazı, içeride birden fazla Unicode kod noktasıyla tutulabilir. Bir harfin ardından eklenen birleştirici aksan, aile emojisini kuran karakterler veya bir bayrağı oluşturan iki bölgesel simge buna örnektir. Araç bunları grapheme kümesi adı verilen bölümleme birimiyle sayar. Bu yöntem, kullanıcının tek karakter gibi algıladığı parçaya yaklaşmak için kullanılır.

“Görünen karakter” ifadesindeki yaklaşık anlamı önemlidir. Grapheme kümesi, ekranda çizilen şekille bire bir aynı şey değildir. Yazı tipi iki harfi tek birleşik şekille gösterebilir; görünmez bir kontrol işareti de ayrı küme oluşturabilir. Aynı metin farklı yazı tipleri veya görüntüleme sistemlerinde farklı çizilebilir. Bu satır ekran görüntüsündeki çizimlerin sayısını ölçmez; metnin Unicode bölümlemesini verir.

Bir aile emojisi olan 👨‍👩‍👧‍👦 bu sayımda tek kümedir. Ancak içinde dört emoji kod noktası ve üç sıfır genişlikli birleştirici bulunur. Dolayısıyla yedi kod noktası ve on bir UTF-16 birimi kullanır. Bu ayrım, “tek emoji ekledim ama formdaki uzunluk birkaç arttı” durumunu açıklar. Formun kendi sayacı kod noktası ya da UTF-16 sayıyor olabilir.

Boşluk dahil ve hariç satırları okuyun

Boşluk dahil satırı bütün grapheme kümelerini sayar. Harfler, noktalama, emojiler, boşluk ve satır sonu kümeleri bu toplama girer. Boşluk hariç satırı ise tamamı JavaScript'in boşluk tanımına uyan kümeleri çıkarır. Normal boşluk, sekme, satır sonları ve bölünemez boşluk bu tanıma dahildir. Başta, sonda veya kelimeler arasında tekrar eden boşluklar korunur; metin kırpılmaz.

Her görünmez işaret boşluk değildir. Örneğin U+200B sıfır genişlikli boşluk, JavaScript boşluk sınıfına girmez. Bu nedenle görünmüyor olsa da boşluk hariç karakter sonucunda kalabilir. Birleştirici işaretler de görünmez olmalarına bakılarak topluca silinmez. Araç, metnin yapısını değiştirebilecek genel bir “görünmezleri temizle” işlemi uygulamaz. Böyle bir temizlik isteniyorsa özgün metin korunarak ayrı bir düzenleme yapılmalıdır.

Bir satır sonu için CRLF çifti tek grapheme kümesidir; iki kod noktası ve iki UTF-16 birimi içerir. Satırları ayrı ayrı kopyaladığınızda bazı uygulamalar CRLF, bazıları LF kullanabilir. Görünüş aynı kalsa da kod noktası veya bayt sayısı farklılaşabilir. Boşluk dahil karakter sonucunun, kod noktası sonucuna her zaman eşit olmamasının sebeplerinden biri de budur.

Unicode kod noktası ve UTF-16 birimi

Unicode kod noktası, metnin işaretlerini tanımlayan sayısal değer düzeyindeki sayımdır. Basit Latin harflerinin her biri bir kod noktasıdır. Birleştirici aksan ayrı bir kod noktası olduğundan “A” ve ardından gelen aksan birlikte iki kod noktası olabilir; grapheme sayısı yine bir kalır. Emoji dizilerinde de tek kümenin birden fazla kod noktası içermesi olağandır.

JavaScript metni UTF-16 kod birimleriyle tutar. Temel çok dilli düzlemdeki sıradan bir harf bir kod birimi kullanırken birçok emoji iki kod birimi kullanır. İki birimlik geçerli çift, tek bir Unicode kod noktasını temsil eder. Bu aracın metin uzunluğu sınırı 100.000 UTF-16 kod birimidir. Dolayısıyla 100.000 karakter kümesi veya 100.000 kelime sınırı olarak okunmamalıdır.

Tek başına kalmış bir UTF-16 eş parçası geçerli bir Unicode metin karakteri değildir. Böyle bir girdi saptanırsa araç sonuç üretmek yerine metin alanında düzeltme ister. Sessizce başka bir karakterle değiştirilip sayılmaz. Normal klavye kullanımı ve düzgün kopyalama sırasında bu durum nadirdir; hasarlı bir aktarım veya bir emojinin ortasından kesilmiş metin buna yol açabilir.

UTF-8 baytı hangi uzunluğu gösterir?

UTF-8 satırı, kutudaki geçerli Unicode metnin UTF-8 kodlamasıyla kaç bayt gerektirdiğini verir. ASCII aralığındaki işaretler birer bayt kullanır. Türkçe karakterlerin bir kısmı iki bayttır; başka alfabelerde üç bayt ve birçok emoji kod noktasında dört bayt gerekir. Birden fazla kod noktasından oluşan tek emoji kümesinin baytları bu nedenle tek bir dört baytla sınırlı değildir.

Bu sayı yalnızca metnin baytlarıdır. Kaydedilen dosyanın başlığı, kodlama imzası, biçimlendirmesi, HTML etiketleri veya sıkıştırılması ayrıca boyut ekleyebilir ya da aktarım boyutunu değiştirebilir. Bir kelime işlemci dosyasının disk üzerinde kaç yer kaplayacağını burada bulamazsınız. Yalın UTF-8 metin aktarımında yararlı bir ölçüdür; bütün dosya türleri için genel dosya boyutu tahmini değildir.

Bayt sonucunu bir sınırla karşılaştırırken kodlamanın gerçekten UTF-8 olduğunu doğrulayın. Başka bir kodlama aynı metni farklı biçimde tutabilir veya bazı karakterleri temsil edemeyebilir. Bu araç başka kodlamalar arasında dönüştürme yapmaz. Metni dışarıya gönderip bir servisle hesaplatmaz; kodlama uzunluğunu tarayıcıda özgün metin üzerinden çıkarır.

Satır sayısı ekranda görünen satır değildir

Mantıksal satır sayısında metin içindeki CRLF, CR ve LF satır sonları esas alınır. CRLF çifti tek satır sonu sayılır. Boş metnin satır sayısı sıfırdır; satır sonu içermeyen dolu veya yalnız boşluk içeren metin bir satırdır. Metnin sonunda satır sonu bulunursa arkasındaki boş satır da sayılır. Böylece “a” bir, “a” ve sonundaki LF iki satır verir.

Tarayıcı metin alanı, yapıştırılan CRLF veya CR satır sonlarını alanı okurken LF biçimine dönüştürebilir. Sayılan metin, hesaplama sırasında alanın verdiği metindir; özgün bir dosyanın satır sonu baytlarının korunacağı garanti edilmez. Bu değişim mantıksal satır sayısını korur, fakat kod noktası ve UTF-8 baytını etkileyebilir. Dosya baytlarını doğrulamak için yalnız bir metin kutusunun sonucunu kullanmayın.

Ekran daraldığında uzun bir cümlenin alt satıra kayması metne yeni satır sonu eklemez. Telefon ekranında beş satır, geniş ekranda iki satır görünen aynı paragraf burada aynı mantıksal satır sayısını verir. Bu sonuç, yazdırılacak sayfa sayısı veya görsel satır sayısı değildir. Bu iki bilgi için yazı tipi, boyut, satır aralığı ve kullanılacak alanın genişliği gerekir.

Paragraf sayımı için kullanılan sözleşme

Araç, boş satırlarla ayrılan dolu satır gruplarını paragraf kabul eder. Bir satır yalnız boşluk, sekme veya JavaScript boşluk karakterlerinden oluşuyorsa ayırıcıdır. Arka arkaya gelen birkaç boş satır yeni boş paragraflar eklemez. Metnin başında ve sonunda bulunan boş satırlar da paragraf sayısını artırmaz. Boş ya da bütünüyle boşluk içeren metinde paragraf sayısı sıfırdır.

Aynı gruptaki iki dolu satır arasında tek satır sonu varsa bu sözleşmede tek paragraf vardır. Bu, her editörün paragraf işaretiyle aynı kural değildir. Bazı yazı uygulamalarında her Enter ayrı paragraf oluşturur; burada yeni paragraf için arada boş satır aranır. Sonucu kullanırken bu tanımı belirtin. Düz metin içinde başlıklar ve listeler de aynı dolu grup kuralıyla değerlendirilir.

Üç örnekle sonuçları kontrol edin

İlk örnek “Merhaba dünya.” metnidir. İki kelime, 14 boşluk dahil karakter kümesi, 13 boşluk hariç küme ve 15 UTF-8 baytı vardır. Tek mantıksal satır ve tek paragraf bulunur. Sonundaki nokta bir karakterdir, fakat kendi başına kelime olarak sayılmaz. Bu örnek, kelimeyle karakteri ve karakterle baytı ayırmak için kısa bir başlangıçtır.

İkinci örnek, A harfinden sonra birleştirici akut aksan ve ardından boşlukla aile emojisini içerir: Á 👨‍👩‍👧‍👦. Ana sonuç bir kelimedir; emoji kelime benzeri bölüm olarak eklenmez. Boşluk dahil üç grapheme kümesi, boşluk hariç iki küme, on kod noktası, on dört UTF-16 birimi ve 29 UTF-8 baytı vardır. Büyük fark, uzun bir metinden değil birleşik işaretlerden kaynaklanır.

Üçüncü örnekte “Birinci satır.”, “İkinci satır.” ve “Son paragraf.” yazıları bulunur. İlk iki satır peş peşe, son yazı aralarında bir boş satır bulunacak şekilde yerleştirilir; örnek kartı LF satır sonlarını kullanır. Ana sonuç altı kelime, satır sayısı dört ve paragraf sayısı ikidir. İlk iki dolu satır tek grup oluşturur; boş satırdan sonraki dolu yazı ikinci gruptur.

Metni değiştirmeden karşılaştırın

Hesaplayıcı baştaki ve sondaki boşlukları atmaz, büyük harfi küçüğe dönüştürmez ve Unicode normalizasyonu uygulamaz. Görünüşleri aynı olan önceden birleşmiş ve ayrık aksanlı harfler farklı kod noktası veya bayt sayısına sahip olabilir. Özgün biçimin korunması bu farkı incelemeyi mümkün kılar. Metni başka bir araçta normalleştirdikten sonra tekrar sayarsanız hangi biçimin karşılaştırıldığını kaydedin.

Bir metni kısaltırken yalnız birim farkından doğan küçük bir sayıya güvenmeyin. Önce hedef sistemin ölçüsünü seçin, sonra cümleleri o sınır için düzenleyin. Sınırın hemen üzerinde bulunan bir metindeki tekrar eden boşluklar azaltılabilir, ancak özel karakterleri gelişigüzel silmek anlamı veya yazının birleşimini bozabilir. Kesilmiş bir emoji ya da aksanlı harf, düzenleme sonunda özgün metindeki aynı işaret olarak kalmayabilir.

Metnin gizliliği ve sonucu paylaşma

Metin sayımı tarayıcıda yapılır; bu aracın hesaplaması metni ağ üzerinden göndermez veya yerel saklama alanına yazmaz. Paylaş seçeneği araç adresini paylaşır, yazdığınız metni bağlantıya eklemez. Buna karşılık ekran görüntüsü aldığınızda metin alanı ve sonuçlar görüntüye dahil olabilir. Özel bir yazıyı, kişisel bilgiyi veya yayımlanmamış taslağı içeren görüntüyü paylaşmadan önce içeriğini okuyun.

“Sitenize ekleyin” seçeneği, hesaplayıcının gömülü görünümünü sunar. Gömüldüğü sayfa veya tarayıcı eklentileri kendi davranışlarına sahip olabilir; yalnızca bu aracın yerel sayım davranışı açıklanmaktadır. Sonucun bir başkası tarafından yeniden kurulmasını istiyorsanız metni paylaşma kararını ayrıca verin. Bağlantının temiz kalması ile ekran görüntüsünde alanların görünmesi farklı paylaşım biçimleridir.

Bu sayaç metnin uzunluğunu belirtilen birimlerle inceler. İçeriğin özgünlüğünü, yazım doğruluğunu, okuma kolaylığını veya yayın koşullarına uygunluğunu puanlamaz. Başvuru, editör veya platform kendi yöntemini belirtiyorsa son kontrolü orada yapın. Bir sayımı raporlarken “Türkçe kelime bölümlemesi”, “boşluk dahil grapheme kümesi” veya “UTF-8 baytı” gibi kullanılan birimi yazmak sonucu anlaşılır kılar.