Nasıl kullanılır
- Metni veya baytları Ascii85'e dönüştürmek için "Kodla", Ascii85'i veriye geri çevirmek için "Kodu çöz" seçeneğini seçin.
- Çıktı PostScript'e eklenecekse veya Python'da adobe=True ile çağrılan a85encode çıktısıyla aynı olması gerekiyorsa "Sınırlayıcılar <~ ~>" seçeneğini açın.
- Uzun çıktının satırlara bölünmesi için isterseniz "Satır kaydırma" değerini ayarlayın.
- Yazın, yapıştırın veya bir dosya açın; ardından sonucu kopyalayın veya indirin. Kod çözerken sınırlayıcılar, boşluklar ve satır sonları yok sayılır.
Ascii85 nedir?
Ascii85 girdiyi 4'er bayt hâlinde okur, her grubu 32 bitlik bir sayı olarak ele alır ve 5 adet 85 tabanlı basamakla yazar. Basamaklar, ! (kod 33) ile u (kod 117) arasındaki 85 ardışık ASCII karakteridir: her karakter, basamak değerine 33 eklenerek elde edilir. Çıktı girdiden %25 daha büyüktür; Base64 kodlamasında bu oran %33'tür.
Biçim ilk olarak Unix btoa aracında kullanıldı. Adobe bunu PostScript Level 2 ve PDF'in ASCII base-85 kodlaması olarak benimsedi; bu sayede görseller ve yazı tipleri gibi ikili veriler düz bir metin dosyası içinde taşınabilir. Python bu kodlamayı base64.a85encode() olarak, Go ise encoding/ascii85 paketi olarak sunar.
z kısaltması ve Adobe sınırlayıcıları
Dört sıfır bayttan oluşan bir grup normalde beş ünlem işaretiyle yazılırdı. Ascii85 bunun yerine tek bir z yazar; böylece boş veri dizileri kısa kalır. Kısaltma yalnızca tam gruplar için geçerlidir. Girdi uzunluğu 4'ün katı olmadığında n bayttan oluşan son grup n + 1 karaktere dönüşür ve hiçbir zaman kısaltılmaz.
PostScript, bir Ascii85 dizesini başta <~ ve sonda ~> ile işaretler. ASCII85Decode filtresini kullanan bir PDF akışında ise yalnızca kapanıştaki ~> veri sonu işareti olarak kullanılır. Buradaki kod çözücü, varsa her iki sınırlayıcıyı da kaldırır ve boşlukları yok sayar; böylece bir PDF veya PostScript dosyasındaki akış verisini doğrudan yapıştırabilirsiniz.
Kodda Ascii85 kullanımı
# Python 3.4+
import base64
base64.a85encode(b'hello') # sonuç: b'BOu!rDZ'
base64.a85encode(b'hello', adobe=True) # sonuç: b'<~BOu!rDZ~>'
base64.a85decode(b'<~BOu!rDZ~>', adobe=True) # sonuç: b'hello'
// Go
import "encoding/ascii85"
dst := make([]byte, ascii85.MaxEncodedLen(len(src)))
n := ascii85.Encode(dst, src)
Teknik özellikler
| Alfabe | ASCII 33 (!) ile 117 (u) arası, ayrıca z |
|---|---|
| Çıktı boyutu | 4 bayt başına 5 karakter (%125) |
| Dolgu | Yok, isteğe bağlı <~ ~> sınırlayıcıları |
| Standart | Adobe PostScript ve PDF |
| Büyük/küçük harf duyarlı | Evet |
Örnekler
| Girdi (UTF-8) | Çıktı |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Sıkça sorulan sorular
Ascii85 ile Base85 arasındaki fark nedir?
Çıktımda neden z harfi var?
z, tam bir gruptaki dört sıfır baytı temsil eder. Kod çözücüler bunu otomatik olarak geri açar; bu nedenle veri değişmez.Adobe sınırlayıcılarına ihtiyacım var mı?
Yalnızca veriyi okuyan program bunları bekliyorsa; örneğin bir PostScript yorumlayıcısı veya adobe=True ile çağrılan Python a85decode. Birçok araç Ascii85'i sınırlayıcılar olmadan da kabul eder. Burada kod çözerken sınırlayıcılar isteğe bağlıdır.
Bir PDF'teki ASCII85 akışının kodunu çözebilir miyim?
Evet. Akış verisini yapıştırın ve "Onaltılık" çıktısını seçin ya da sonucu indirin. Akışın filtrelerinde ASCII85Decode'dan sonra FlateDecode da listeleniyorsa çözülen baytlar hâlâ zlib ile sıkıştırılmıştır ve ikinci bir adım gerekir.
Neden geçersiz karakter hatası alıyorum?
! ile u arasındaki karakterlere ve gruplar arasında z karakterine izin verir. Bazı btoa sürümlerinin ve foldspaces=True ile Python'un kullandığı, dört boşluk için y kısaltması Adobe biçiminin parçası değildir ve reddedilir.