Bu Araç Nedir?
Sade ASCII metin (İngilizce harfler, rakamlar, temel noktalama) için karakter sayısı ile bayt sayısı aynı rakamdır — UTF-8'de her karakter tam olarak bir bayt kaplar. Metin aksanlı harfler, Çince/Japonca/Korece karakterler, Kiril, Arapça, emoji veya diğer ASCII olmayan çoğu karakteri içerdiğinde bu doğru olmaktan çıkar: tek bir karakter UTF-8'de 2, 3 veya 4 bayt, UTF-16'da ise 2 veya 4 bayt kaplayabilir.
Bu durum, bir sistemin karakter sınırı değil de bayt sınırı olduğu her durumda önem kazanır — SMS mesajları, veritabanı sütun boyutları, API yük sınırları ve bazı sosyal platformlar karakter değil bayt cinsinden ölçüm yapar; bu yüzden aynı metin parçası, hangi dili veya sembolleri içerdiğine bağlı olarak fark edilmeden bir sınırı aşabilir.
Neden Kullanmalısınız?
- Twitter/X tarzı bir bio alanı karakter değil bayt sınırı koyuyor ve adınızda bir emoji var — form sessizce kırpmadan önce gerçek bayt maliyetini görmek için buraya yazın.
- Uygulamanızın veritabanı sütunu arka planda bayt cinsinden VARCHAR(255) olarak tanımlı, ve "kısa görünen" bir Japonca ya da Arapça ürün başlığı sürekli reddediliyor — Latin alfabesiyle yazılmış bir başlığın 3 katı bayt kullandığını görmek için buraya yapıştırın.
- Çok dilli bir pazarlama mesajının kaç SMS segmenti kullanacağını tahmin ediyorsunuz — operatörler bayt boyutuna göre faturalandırıp bölme yaptığından, buradan UTF-8/UTF-16 bayt sayısını kontrol etmek, tahmin edip beklenmedik bir fatura almaktan daha iyidir.
- Bir API, sıkı bir bayt uzunluğu doğrulayıcısı olan bir JSON alanında anlaşılmaz bir "payload too large" hatası veriyor ve dize editörünüzde normal görünüyordu — bu araç o dizenin gerçekte kaç bayta mal olduğunu tam olarak gösterir.
- Aynı cümlenin bir dilde neden diğerinden daha fazla depolama alanı kapladığını karşılaştırıyorsunuz — her versiyonu yazıp düz ASCII sürümüne kıyasla CJK veya Arapça metinde UTF-8 bayt sayısının nasıl fırladığını görüyorsunuz.
- Bir kullanıcı adındaki emojinin titiz bir doğrulama kuralı tarafından bir mi yoksa iki karakter olarak mı sayıldığını kontrol etmeniz gerekiyor — bu araç onu bir insanın göreceği gibi sayar, böylece diğer sistemin yanlış yapıp yapmadığını anlayabilirsiniz.
Nasıl Kullanılır
- Kutuya metin yazın veya yapıştırın.
- Altındaki karakter sayısını, UTF-8 bayt sayısını ve UTF-16 bayt sayısını okuyun — yazdıkça güncellenirler.
Örnek
Giriş
Hello, 世界! 🌍Çıkış
12 karakter, 19 UTF-8 bayt, 26 UTF-16 baytASCII kısmı ("Hello, " ve "! ") UTF-8'de karakter başına 1 bayt kaplar. Her Çince karakter 3 bayt, emoji ise 4 bayt kaplar — bayt sayılarının karakter sayısından belirgin biçimde yüksek olmasının nedeni budur.
Karakter türüne göre UTF-8 bayt boyutu
Aşağıdaki tablo, karakter kategorisine göre tipik UTF-8 bayt maliyetini gösterir — çok dilli bir metnin tamamını yapıştırmadan önce gerçekte ne kadar ağır olacağını tahmin etmek için kullanışlıdır.
| Karakter türü | Örnek | UTF-8 bayt | UTF-16 bayt |
|---|---|---|---|
| ASCII harf/rakam | A, 7 | 1 | 2 |
| Aksanlı Latin (é, ñ, ü) | é | 2 | 2 |
| Kiril / Yunan / İbranice / Arapça | д, α, א | 2 | 2 |
| CJK (Çince, Japonca, Korece) | 世 | 3 | 2 |
| Çoğu emoji (BMP dışı) | 🌍 | 4 | 4 |
Yaygın kullanım alanları
- Çok dilli bir ürün açıklamasının, karakter sayısı yerine bayt uzunluğuyla tanımlanmış bir veritabanı sütununa sığıp sığmayacağını kontrol etmek.
- SMS segment kullanımını tahmin etmek; çünkü SMS bayt boyutuna göre faturalandırılır ve bölünür, Latin olmayan metinler ise segment başına farklı bir sınır kullanır.
- Bir API yükünün veya form alanının, göndermeden önce bayt tabanlı bir boyut sınırının altında kaldığını doğrulamak.
- "Kısa görünen" bir dizenin, bayt tabanlı uzunluk kontrolü yapan bir sistem tarafından neden reddedildiğini anlamak.
Sıkça Sorulan Sorular
Karakter sayısı ile bayt sayısı neden uyuşmuyor?
Unicode metin bayt olarak saklanır ve her karakterin kaç bayt gerektirdiği, kodlamaya ve karakterin kendisine bağlıdır. UTF-8'de ASCII karakterler 1 bayt, aksanlı Latin harflerin ve Kiril/Yunan/İbranice/Arapça harflerin çoğu 2 bayt, CJK karakterlerinin çoğu 3 bayt, emoji ise genellikle 4 bayt kaplar. Karakter sayısı, sembollerin nasıl saklandığını hesaba katmadan sadece sembolleri sayar.
Bayt sınırı olan bir alan için hangi bayt sayısını kullanmalıyım?
Sistemin metni saklamak veya iletmek için gerçekte kullandığı kodlamayı kullanın — çoğu modern web API'si, veritabanı ve dosya UTF-8 kullanır, bu yüzden genellikle ilgili olan UTF-8 bayt sayısıdır. Bazı eski sistemler (Windows/Java'nın dahili dize işleme mekanizması gibi) UTF-16 kullanır.
Bu araç emojileri doğru sayıyor mu?
Evet. Birçok emoji dahili olarak bir çift UTF-16 "vekil" (surrogate) kod birimi olarak saklanır ve saf sayma yöntemleri bunları 2 karakter olarak sayar. Bu araç Unicode kod noktalarını doğru şekilde sayar, böylece bir emoji, bir kişinin gerçekte gördüğü karakter sayısıyla eşleşecek şekilde 1 karakter olarak sayılır.
Bu, Kelime Sayacı aracıyla aynı mı?
Hayır — Kelime Sayacı, yazım için kelime ve cümle sayılarına odaklanır. Bu araç ise özellikle bayt boyutuyla karakter sayısını karşılaştırır; bu da kelime sayısı gereksinimlerinden çok teknik sınırlar için önemlidir.
Metnim herhangi bir yere yükleniyor mu?
Hayır. Sayma işlemi, JavaScript'in yerleşik metin kodlayıcısı kullanılarak tamamen tarayıcınızda yerel olarak gerçekleşir; hiçbir şey sunucuya gönderilmez.
Aynı karakter neden UTF-8'de UTF-16'dan farklı sayıda bayt kaplıyor?
İki kodlama, kod noktalarını baytlara eşlemek için tamamen farklı kurallar kullanır. UTF-8, karaktere bağlı olarak 1 ile 4 bayt arasında kullanır ve ASCII'nin 1 bayt kalması için optimize edilmiştir. UTF-16 çoğu karakter için 2 bayt, yalnızca Temel Çok Dilli Düzlem dışındaki karakterler için (çoğu emoji gibi) 4 bayt kullanır — bu yüzden bir Çince karakter UTF-8'de 3 bayt iken UTF-16'da sadece 2 bayttır, bir emoji ise ikisinde de 4 bayttır.
Ten rengi veya aile emojisi (birden fazla birleşik karakterden oluşan) doğru sayılıyor mu?
Araç Unicode kod noktalarını sayar, bu yüzden sıfır genişlikli birleştirici ile bağlanan birden fazla kod noktasından oluşan bileşik bir emoji (aile emojisi gibi) tek bir glif olarak görünse de, gerçekte kodlandığı şekilde birden fazla karakter olarak sayılır.
Sade İngilizce metin için UTF-8 bayt sayısı ile karakter sayısı arasındaki fark nedir?
Yalnızca ASCII harfler, rakamlar, boşluklar ve temel noktalama kullanan standart İngilizce metin için ikisi aynıdır — UTF-8'de her karakter tam olarak 1 bayttır. Fark, ancak aksanlı harfler, semboller veya Latin olmayan alfabeler eklendiğinde ortaya çıkar.
Bunu Twitter/X veya SMS karakter sınırlarını tam olarak kontrol etmek için kullanabilir miyim?
Bu araç, bu sınırların üzerine kurulduğu ham karakter ve bayt sayılarını verir, ancak platformlar bazen kendi ağırlıklandırma kurallarını uygular (örneğin bazı emojileri veya URL'leri gerçek uzunluklarından bağımsız olarak sabit sayıda karakter olarak sayabilirler) — uç durumlar için platformun kendi kurallarını kontrol edin ve temel bayt maliyetini anlamak için bu aracı kullanın.
Bunu metin editörümdeki yerleşik karakter sayacı yerine neden kullanmalıyım?
Çoğu editör yalnızca karakterleri sayar, kodlamaya göre baytları değil — uymanız gereken sınır bayt cinsinden ifade edildiyse (SMS'lerde, veritabanı sütunlarında veya API yüklerinde sıkça olduğu gibi), editörünüzün karakter sayacı aşmak üzere olduğunuz gerçek sınır hakkında size hiçbir şey söylemez.