Metinden ikiliğe dönüştürücü

Metni ikiliğe çevirin — UTF-8 baytları, bayt başına sekiz basamak — ve ikiliği yeniden metne; yerinde olmayan bir karakterin satırı ve sütunuyla birlikte.

Girdi
Çıktı
01001101 01100101 01110010 01101000 01100001 01100010 01100001

Bir metin nasıl birlere ve sıfırlara dönüşür

Bilgisayar metni bayt olarak saklar; bir bayt sekiz bittir ve her biri bir 0 ya da bir 1’dir. Bu sayfa size o baytları gösterir: bir metin yazın, her bayt sekiz ikilik rakam olarak ve bir baytla sonraki arasında bir boşlukla çıkar; ya da ikilik rakamlar yapıştırın ve oluşturdukları metni okuyun. İki yönde de iş görür, tümüyle tarayıcınızda çalışır ve açıldığında zaten dönüştürülmüş bir örnek gösterir.

Bir metnin hangi baytlardan oluştuğu kodlamasına bağlıdır; burada, siz başkasını seçmedikçe bu kodlama UTF-8’dir, çünkü web sayfalarının, URL’lerin ve metin dosyalarının çoğunun tuttuğu şey UTF-8’dir. “Birim” seçicisi bir rakam grubunun neyi temsil ettiğini belirler: bir UTF-8 baytı, iki bayt sırasından herhangi birinde bir UTF-16 baytı ya da bir kod noktası. Seçtiğiniz birim iki yönde de geçerlidir ve sayfa onu asla sizin yerinize değiştirmez. Yapıştırdığınız şey başka bir birime benzediğinde sayfa bunu söyler ve bildirimin yanına bir düğme koyar; siz ona tıklayana kadar hiçbir şey değişmez.

Her bayt neden sekiz rakamla yazılır

Bit tek bir ikilik rakamdır, bayt da bunlardan sekiz tanesidir. Sekiz bit 256 farklı şekilde ayarlanabilir; bu yüzden bir bayt, 00000000 olarak yazılan 0’dan 11111111 olarak yazılan 255’e kadar bir tam sayı tutar. Dosyalar, bellek ve ağlar bayt cinsinden sayılır ve karşılaşmanız muhtemel her makinede bir bayt sekiz bittir; ağ standartları ona oktet der, bu da yalnızca sekiz anlamına gelebilen bir sözcüktür.

Bu değerlerin ilk 128’i ASCII’dir: İngilizce harflerin, rakamların ve yaygın noktalama işaretlerinin kodu; 128 değer için de yedi bit yeter. Bu yüzden her ASCII karakterinin baytı bir 0 ile başlar ve UTF-8, 1 ile başlayan baytları ASCII’nin sahip olmadığı her şeye ayırır. Sayfa her baytı, baştaki sıfırlar dahil sekiz rakamın hepsiyle yazar; bunun pratik bir nedeni de vardır: sabit ve tek bir genişlikteki baytlar, aralarında hiç boşluk olmadan, sekizer rakam hâlinde geri okunabilir.

H harfi, bit bit

Büyük bir H harfi alın. ASCII ona 72 numarasını verir ve 72 bayt olarak 01001000 olur. Soldan okunduğunda sekiz basamağın değerleri 128, 64, 32, 16, 8, 4, 2 ve 1’dir ve her 1 kendi basamağının değerini katar: bu baytın birleri 64 ve 8 değerindeki basamaklardadır ve 64 ile 8 toplam 72 eder. Küçük i harfi 105’tir, yani 64, 32, 8 ve 1; böylece Hi, 01001000 01101001 olarak çıkar.

Harf büyüklüğü tek bir bittir. Küçük h harfi 01101000 olur: 32 değerindeki basamağı açılmış hâliyle H’nin baytı. İngiliz alfabesinin her harfi için de aynısı geçerlidir, çünkü ASCII her küçük harfi, büyük hâlinin tam 32 üstünde numaralandırır.

“Taban” seçicisi aynı baytı, onu değiştirmeden başka şekillerde yazar. “Onluk” seçiliyken H, 72’dir; “On altılık” seçiliyken 48, “Sekizlik” seçiliyken 110. Dört şekilde yazılmış tek bir bayttır bu ve geri okurken de rakamlar hangi tabanı seçtiyseniz o tabanda okunur. Metinden on altılığa dönüştürücü “On altılık” ile açılır; orada bir bayt sekiz değil iki rakam tutar.

ASCII’nin ötesindeki bir harf neden iki ya da daha fazla bayt tutar

ASCII 127’de biter. Aksanlı bir harfin, Kiril, İbrani ya da Arap alfabesinden bir harfin, Japonca ya da Korece bir karakterin ve bir emojinin kod noktalarının hepsi bunun ötesindedir; UTF-8 bir karakteri yalnızca ASCII olduğunda tek bir baytla yazar ve 1 ile başlayan baytları geri kalan her şeye ayırır. Bu yüzden bunların her biri iki, üç ya da dört bayt tutar ve bunun olduğunu ikilikte izleyebilirsiniz, çünkü her baytın ilk bitleri, o baytın bir karakterin hangi parçası olduğunu söyler:

  • 0xxxxxxx tek baytlık bir karakterdir: ASCII; yedi biti x’lerin durduğu yere yazılır. H, 01001000 olur.
  • 110xxxxx 10xxxxxx iki baytlık bir karakterdir; 2.047’ye kadarki kod noktaları içindir ve Avrupa dillerinin aksanlı harflerini, Kiril, İbrani ve Arap alfabelerini kapsar. é, 11000011 10101001; א ise 11010111 10010000 olur.
  • 1110xxxx 10xxxxxx 10xxxxxx üç bayttır; Japonca kana ve yaygın kanjilerin, Korece Hangul’un ve euro işaretinin bulunduğu, 65.535’e kadarki kod noktaları içindir. € ise 11100010 10000010 10101100 olur.
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx dört bayttır; bunun ötesindeki her kod noktası içindir ve emojilerin çoğu oradadır.

İki, üç ya da dört birle başlayan bir ilk bayt, açtığı karakterin kaç bayt olduğunu söyler; bir karakteri sürdüren her bayt da 10 ile başlar, böylece bir karakterin ortasındaki hiçbir bayt bir karakterin başı sanılamaz. א harfinin iki baytından gösterge bitlerini, yani 110 ve 10 bitlerini çıkarın; geriye kalan on bir bit, 10111010000, ikilikte yazılmış hâliyle harfin kod noktasıdır, yani U+05D0. “On altılık” seçiliyken aynı iki bayt D7 90 olarak okunur ve düzen rakamların içine gömülür; ikilikte ise her baytın ilk bitlerinde durur.

Tek bir emoji için dört bayt

😀 emojisi U+1F600 kod noktasıdır ve 65.535’in çok ötesindedir; bu yüzden UTF-8 onu dört baytla yazar: 11110000 10011111 10011000 10000000. İlki dört birle başlar, dolayısıyla dört baytlık bir karakteri açar; ondan sonraki üç baytın her biri de 10 ile başlar. Kod noktası on yedi ikilik rakam tutar, 11111011000000000; bu, üç baytlık bir karakterin yer verdiği on altı rakamdan bir fazladır; dört baytlık düzen ise yirmi bir rakama yer verir.

Tek bir simge gibi görünen bir emoji birkaç kod noktası olabilir ve her biri eksiksiz yazılır. Bir cilt tonuyla el sallayan bir el iki kod noktası ve sekiz bayttır. Dört kişilik bir aile ise yedi kod noktası, yani dört kişi ile aralarındaki üç görünmez birleştirici, ve yirmi beş bayttır. Sayfaya bunlardan birini yapıştırın ve grupları sayın.

Başka bir dönüştürücü א için neden on bir rakam yazdırır

א için on bir rakam, 10111010000, yazdıran bir dönüştürücü harfin baytlarını yazmamıştır. Unicode’un harfe verdiği numarayı, yani 1488 olan U+05D0 kod noktasını, tek bir ikilik sayı olarak yazmıştır ve bu sayı, bir dosyanın ya da bir ağın tuttuğu hiçbir şeyin baytı değildir. Böyle yazılmış bir mesaj ancak aynı varsayımı yapan bir okuyucu tarafından geri okunabilir.

İki yanıt göründüğünden daha yakındır. On bir rakam, yukarıda gösterildiği gibi, gösterge bitleri çıkarıldıktan sonra UTF-8’in iki bayta yaydığı bitlerin ta kendisidir; yani iki dönüştürücü de aynı sayıyı yazar ve yalnızca biri onu saklayan baytları yazar. Bir ASCII karakterinde ikisi baştaki sıfırlar dışında uyuşur; düz İngilizce için aynı yanıtı verip neredeyse diğer her şeyde ayrılmalarının nedeni budur.

Bu sayfa da o yanıtı verir; ama varsaydığı bir birim olarak değil, sizin seçtiğiniz bir birim olarak: “Kod noktaları” birimini seçin, א 10111010000 olarak yazılır ve aynı şekilde geri okunur. UTF-8 seçiliyken, kod noktası yazan bir dönüştürücünün İbranice, Rusça ya da Japonca yazdığı bir mesajı yapıştırın: gruplar bayt için fazla geniştir; sayfa tahmin yürütmez, grupların kod noktalarına benzediğini söyler ve “Kod noktalarına geç” düğmesini sunar. JavaScript’in charCodeAt yönteminin yaptığı gibi her seferinde bir UTF-16 kod birimiyle çalışan bir dönüştürücü, 😀 emojisini, UTF-16’nın onu sakladığı vekil çiftin iki yarısı olan on altı rakamlık iki sayı olarak yazar; “Kod noktaları” ise bu çifti tek bir emoji olarak geri okur.

İkilik rakamları yeniden metin olarak okumak

İkilik rakamları yeniden metne çevirmek için yönü “İkilikten metne” olarak değiştirin ve rakamları yazın ya da yapıştırın; çıktı, onların oluşturduğu metindir. “Girdi olarak kullan” düğmesi bunu tek tıkla yapar: çıktıyı girdiye taşır ve yönü çevirir; bir gidiş dönüşü sınamanın en hızlı yolu budur. Aşağıdakilerin hepsi aynı baytlar olarak okunur:

  • Satır sonları dahil her türlü boşluk ve baytların arasında virgül, noktalı virgül, iki nokta ya da tire.
  • Rakamlar sekiz rakamlık tam baytlara bölündüğü her yerde hiç ayırıcı olmaması; “Stil” altındaki “Bitişik” onları böyle yazar.
  • Yedi ya da daha az rakamlık gruplar: baştaki sıfırı düşürülmüş bir ASCII karakteri böyle görünür; 1001000 1101001, Hi olarak okunur.
  • Bir baytın önünde büyük ya da küçük harfle bir 0b ve bütünün çevresinde bir çift köşeli parantez, süslü parantez, parantez ya da tırnak.

Yine de sayfa tahmin yürütmez. Başka herhangi bir karakter ya da sekiz rakamdan uzun olup tam baytlara bölünmeyen bir grup okumayı durdurur ve sayfa bunu, durduğu satır ve sütunla söyler; kendi satırınız da altında, yeri işaretlenmiş olarak gösterilir. Uzun bir mesajda bu, bulabileceğiniz bir yazım hatası ile sessizce yanlış olan bir metin arasındaki farktır.

Bayt olarak sorunsuz okunan ama UTF-8 metni olmayan ikilik rakamlar reddedilmek yerine gösterilir. Bir karakterin ortasında kesilmiş bir mesaj, bozuk dizisi değiştirme karakteri olan U+FFFD ile gösterilerek geri gelir; çıktının altındaki bir bildirim de böyle kaç dizi olduğunu ve ilkinin nerede başladığını söyler: baytı, onun için yapıştırdığınız rakamları ve bunların satırıyla sütununu.

Metin için ikilik, sayı için ikilik

Buraya 5 yazın; yanıt 101 değil, 00110101 olur. Sayfa, ASCII’nin 53 numarasını verdiği 5 karakterini yazar, çünkü bir metnin rakamları onu saklayan baytlardır; 101 ise ikilikte yazılmış beş sayısıdır ve bu, başka bir yanıtı olan başka bir sorudur. 255 için de aynısı geçerlidir: burada yazıldığında üç karakter ve üç bayttır, oysa 255 sayısı tek bir bayttır: 11111111.

Elinizdeki şey bir metin değil de bir sayıysa, örneğin bir sayım, bir yazmaç ya da bir programın yazdırdığı bir değer, onu götüreceğiniz yer Sayı tabanı dönüştürücüdür: değerin kendisini ikilik, sekizlik, onluk, on altılık ve başka tabanlar arasında dönüştürür; sabit bir genişlikte negatif bir değeri ikiye tümleyen olarak yazar ve her biti, tıklayıp çevirebileceğiniz bir bit olarak gösterir. Bu sayfa bir metnin karakterlerinden yola çıkar; o sayfa ise bir sayıdan.

Sıkça sorulan sorular

Adımı ikilikte nasıl yazarım?
Adınızı girdi kutusuna yazın; bayt başına sekiz rakamla ve baytlar arasında birer boşlukla, bayt bayt çıkar. Örneğin Ada, 01000001 01100100 01100001 olur. Aksanlı bir harf ya da başka bir alfabeden bir harf iki ya da daha fazla bayt tutar; iki ad arasındaki bir boşluk da kendi başına bir bayttır: 00100000.
Bir karakter kaç bit tutar?
UTF-8’de bir ASCII harfi, rakamı ya da noktalama işareti için sekiz; aksanlı bir harf ya da Kiril, İbrani veya Arap alfabesinden bir harf için on altı; Japonca kana, yaygın kanjiler, Korece Hangul ve euro işareti için yirmi dört; emojilerin çoğu için otuz iki. Tek bir simge olarak gördüğünüz bir şey altta birkaç kod noktası olabilir ve her biri kendi bitlerini tutar.
Baytların arasında boşluk olmayan ikilik rakamlar yapıştırabilir miyim?
Evet, rakamların tam baytlara bölündüğü her yerde: on altı rakam iki bayt, yirmi dört rakam üç bayttır. Sekiz rakamdan uzun ve uzunluğu sekizin katı olmayan bir grup, hangi baytın bir rakam kaybettiği tahmin edilmeden bölünemez; bu yüzden yanlış okunmak yerine kendi satırında ve sütununda reddedilir.
Metnim neden eşkenar dörtgen içinde bir soru işaretiyle geri geliyor?
O simge U+FFFD, yani değiştirme karakteridir; sayfa onu baytların UTF-8 metni olmadığı her yere koyar: çoğu zaman bir bayt kaybolmuş ve bir karakter yarıda kesilmiştir ya da baytlar hiçbir zaman UTF-8 olmamıştır. Sayfa bütün mesajı reddetmek yerine her bozuk diziyi böyle gösterir ve çıktının altında kaç tane olduğunu ve ilkinin nerede başladığını söyler; böylece yapıştırdığınız şeydeki hasarı bulabilirsiniz.
Başka bir dönüştürücü neden bana farklı ikilik rakamlar veriyor?
Büyük olasılıkla her karakterin baytlarını değil kod noktasını yazıyordur. İkisi baştaki sıfırlar dışında ASCII’de uyuşur, onun ötesinde ayrılır: א burada 11010111 10010000, orada 10111010000 olur. O dönüştürücünün yanıtını almak ya da onun yazdığı bir mesajı geri okumak için “Kod noktaları” birimini seçin.
5 burada neden 101 değil?
Çünkü kutuya yazılan bir 5 bir karakterdir ve sayfa onu saklayan baytı yazar: 00110101. Beş sayısı ikilikte 101 olur; metin değil de sayı için Sayı tabanı dönüştürücüyü kullanın.
Metnim bir sunucuya gönderiliyor mu?
Hayır. İki yön de tümüyle tarayıcınızda çalışır; böylece yazdığınız metin ve yapıştırdığınız ikilik rakamlar cihazınızdan asla çıkmaz.

İlgili araçlar

  • Sayı tabanı dönüştürücü

    Bu sayfaya 5 yazarsanız, 5 karakterini saklayan baytı alırsınız: 00110101. O sayfa ise metin için değil, sayı içindir: değerin kendisini dönüştürür, böylece beş sayısı 101 olarak çıkar.

  • Metinden on altılığa dönüştürücü

    On altılık bir baytı iki basamakla yazar, ikilik ise sekiz basamak ister: Hi burada 01001000 01101001, orada 48 69 olur. Döküm baytları böyle gösterir, kod da böyle yazar. Bu sayfa da on altılık sunar; o sayfa on altılıkla açılır.

  • Base64

    Base64 kodlayın ve çözün — tam UTF-8 desteği.

  • URL kodlayıcı / çözücü

    Bir değeri veya tüm bir URL’yi yüzde kodlayın ve geri çözün.