Metnin altında hangi baytlar var?
Kod noktalarını, UTF-16 birimlerini, UTF-8 baytlarını, normalizasyon etkisini ve yüzde kodlamasını tek, denetlenebilir JSON sonucunda görün.
Hesaplama durdu
Yapılandırılmış hata JSON'unu göster
Kesin sonuç
UTF-8 hex bayt dizisi
Yüzde kodlu çıktı
Orijinal JSON string literal
Normalize JSON string literal
Önce / sonra karşılaştırması
| Biçim | Kod noktası | UTF-16 | UTF-8 bayt | UTF-8 hex | Grapheme |
|---|
Kod noktası kayıtları
Sıra ve UTF-16 başlangıçları 0 tabanlıdır.
| Sıra | Karakter | Unicode | Ondalık | UTF-8 hex | UTF-16 birimleri | UTF-16 başlangıcı |
|---|
UTF-16 birimleri ve surrogate çiftleri
| Sıra | Hex | Ondalık | Rol | Çift sırası |
|---|
Grapheme kümeleri
Orijinal
Normalize
Agent JSON çıktısı
Tablolar ve bu JSON, aynı UnicodeBayt.analizEt dönüş nesnesinden üretilir.
Karakter, kod noktası ve bayt aynı şey değildir
“Bir metnin karakter, Unicode kod noktası, UTF-16 birimi ve UTF-8 bayt sayıları aynı olmak zorunda değildir.”
UTF-8 bit aralıkları
| Kod noktası | Bit kalıbı | Bayt |
|---|---|---|
| U+0000–U+007F | 0xxxxxxx | 1 |
| U+0080–U+07FF | 110xxxxx 10xxxxxx | 2 |
| U+0800–U+FFFF* | 1110xxxx 10xxxxxx 10xxxxxx | 3 |
| U+10000–U+10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4 |
* U+D800–U+DFFF surrogate aralığı UTF-8 kod noktası olarak yasaktır. Dört kuralın kaynağı: RFC 3629 §3.
ş → C5 9F, adım adım
- ş, U+015F yani ondalık 351'dir.
- Aralık U+0080–U+07FF olduğundan iki bayt kalıbı seçilir: 110xxxxx 10xxxxxx.
- 351'in bitleri 5 + 6 bit olarak 00101 | 011111 ayrılır.
- Kalıplara yerleşince 11000101 10011111, yani C5 9F elde edilir.
Bu baytlar component modunda %C5%9F olur. `%` ve iki büyük hex basamağı kuralı WHATWG URL percent-encode ile uyumludur.
Yüzde kodlama profilleri
Motor önce normalize metni UTF-8 baytlarına çevirir, sonra yalnız açıkça izin verilen ASCII baytlarını olduğu gibi bırakır. encodeURIComponent kullanılmaz.
- rfc3986-component: yalnız A–Z a–z 0–9 - . _ ~ açıktır (RFC 3986 §2.3, unreserved).
- rfc3986-path-segment: unreserved kümesine ! $ & ' ( ) * + , ; = : @ eklenir; / ? # % kodlanır (RFC 3986 §2.2 ve §3.3, pchar).
- Unicode önce UTF-8'e çevrilir (RFC 3986 §2.5; WHATWG UTF-8 percent-encode).
Adı benzer olsa da bu aracın sıkı RFC 3986 component profili, WHATWG component kümesi/JavaScript encodeURIComponent ile aynı değildir: !'()* burada kodlanır.
UnicodeBayt nasıl kullanılır?
- Metni girin. Türkçe, emoji, birleşik işaret veya kontrol karakteri içerebilen metni kutuya yazın.
- Kuralları seçin. Normalizasyon biçimini, yüzde kodlama profilini, grapheme sayımını ve kayıt limitini seçin.
- Kesin sonucu alın. Özet, kayıt tabloları ve aynı motor nesnesinden üretilen JSON çıktısını inceleyin veya kopyalayın.
Sık hatalar
- JavaScript
string.lengthdeğerini kullanıcı algısındaki karakter sayısı sanmak. - Surrogate çiftiyle yazılan emojiyi iki Unicode karakteri sanmak.
- NFC ve NFD metinlerinin aynı UTF-8 baytlarını ürettiğini varsaymak.
- Eşleşmemiş surrogate birimini sessizce U+FFFD'ye çevirmek.
- URL yüzde kodlamasını HTML karakter kodlamasıyla karıştırmak.
Intl.Segmenteryokken kod noktası sayısından sahte grapheme sonucu üretmek.
Kısa SSS
JavaScript length kaç karakter verir?
String.length, kullanıcı algısındaki karakterleri değil UTF-16 kod birimlerini sayar; astral emojiler genellikle iki birimdir.
NFC ve NFD aynı baytları mı üretir?
Hayır. Görsel olarak aynı metin farklı kod noktaları ve UTF-8 baytları içerebilir; örneğin é NFC'de iki, e + birleşik aksan NFD'de üç UTF-8 baytıdır.
Intl.Segmenter yoksa grapheme sayısı nasıl bulunur?
Bulunmaz. UnicodeBayt sayı ve kümeleri null bırakır, SEGMENTER_YOK uyarısı verir ve kod noktası sayısını tahmin olarak kullanmaz.
URL yüzde kodlaması HTML kodlaması mıdır?
Hayır. Yüzde kodlaması UTF-8 baytlarını %HH biçimine dönüştürür; HTML karakter referansları ise HTML ayrıştırıcısına yönelik ayrı bir sözdizimidir.
Kaynaklar ve runtime sınırı
- RFC 3629 — UTF-8
- Unicode Standard Annex #29 — Text Segmentation
- WHATWG URL Standard
- RFC 3986 — URI sözdizimi
- ECMA-402 — Intl.Segmenter
- ECMA-262 — String.prototype.normalize
- Mother Effing Byte Counter — talep/UX örneği, normatif değildir
Grapheme sınırları, tarayıcının Intl.Segmenter uygulamasına ve Unicode verisine bağlıdır (ECMA-402 FindBoundary). Standart web API kesin Unicode veri sürümünü açıklamadığı için JSON meta verisi runtimeDependent: true ve doğrulanamıyorsa unicodeSurumu: null döndürür.