Ruby/ASCII

←here Dokümanlar | Encoding→

Bize göre "Hello world" gibi bir string bir kısım harfler ve ortasında bir boşluk olarak görünüyor. Bilgisayarınıza göre ise her String gerçekte herşey bir sayılar serisidir.


ASCII

Örneğimizde, "Hello world" string'inin her karakteri 0'dan 127'ye kadar olan bir sayı ile ifade edilir. Örneğin bilgisayarınıza göre büyük harf "H" 72 sayısıyla, boşluk ise 32 sayısıyla kodlanır, bu kodlamaya encoding. ASCII standardı orjinalinde telgraf üzerinden yazı göndermek için tasarlandı ve her hangi sayının hangi karaktere karşı geldiğini bildiriyor.

Birçok Unix-benzeri işletim sisteminde tüm ASCII kodlarını terminalde "man ascii" komutu girerek görebilirsiniz. Wikipedia'nın ASCII sayfasında da ASCII kodlarının listesini görebilirsiniz. ASCII listesini kullanarak bizim "Hello world" string'imizin aşağıdaki ASCII kodlara dönüştürüldüğünü anlayabiliriz.

H  e   l   l   o   space  w   o   r   l   d
72 101 108 108 111 32     119 111 114 108 100


Ayrıca Ruby 1.8 ve öncesinde bir karakterin ASCII kodunu? operatörü kullanarak görebilirsiniz.

puts ?H 
puts ?e
puts ?l
puts ?l
puts ?o


Soru işareti operatörü Ruby 1.9'dan itibaren çalışmaz. Yerine ord metodu kullanılır.

puts "H".ord
puts "e".ord
puts "l".ord
puts "l".ord
puts "o".ord

Aşağıdaki program çıktısına bakınca "Hello world" string'inin "Hello" parçasının ASCII kodları görünür.

$ ruby ascii.rb
72
101
108
108
111


Space karakterinin ASCII kodunu almak için escape sequence karşılığını girmeliyiz. Gerçekte ? operatörü ile herhangi bir escape sequence ifadesi kullanabiliriz.

puts ?\s
puts ?\t
puts ?\b
puts ?\a

Ama bu kodu Ruby >= 1.9 üzerinde çalıştırmak için

puts "\s".ord
puts "\t".ord
puts "\b".ord
puts "\a".ord

kullanılır. The sonuç:

32
9
8
7


Terminal emülatörleri

Farkında olmayabilirsiniz ama şimdiye kadar Ruby programlarınızı terminal emülatörü adı verilen bir programın içinde çalıştırıyordunuz Microsoft Windows'ta konsol, Mac OS X'te Terminal uygulaması, bir telnet client'da rxvt, veya X Window Sistem'de xterm gibi programlarda.

Ruby programınız "H" harfini yazmaya kalktığında "H" karakterinin ASCII kodunu (72) terminal emülatöre gönderir, ve emülatör de ekrana "H" çizer. Ruby programınız bir bell karakteri yazmaya kalktığında terminal emülatöre başka bir ASCII kodu yollar ASCII kod 7. Bu durumda terminal emülatör ekrana bir harf çizmez, bunun yerine ya beep sesi çıkarır ya da kısa bir süre flaş çakar. Her kodun nasıl işleneceği genellikle ASCII standardı tarafından belirlenir.


Diğer karakter kodlamaları

ASCII standardı bir çeşit karakter kodlamasıdır. Yukarıda belirtildiği üzere ASCII standardı karakterler için sadece 0'dan 127'ya kadar sayıları kullanır. İlk icat edenlere bu kadarı yetmiş, ancak dünyada çok daha fazla karakterler kullanılıyor. Diğer karakter kodlama sistemleri örneğin Latin-1, Shift_JIS, ve Unicode Transformation Format (UTF) üretilerek Arapça, İbranice, Çince, ve Japonca gibi dillerde bulunan bir sürü karakter ifade edilebildi.


ASCII tablosu

BinaryOctDecHexGlyph
010 00000403220?
010 00010413321!
010 00100423422"
010 00110433523#
010 01000443624$
010 01010453725%
010 01100463826&
010 01110473927'
010 10000504028(
010 10010514129)
010 1010052422A*
010 1011053432B+
010 1100054442C,
010 1101055452D-
010 1110056462E.
010 1111057472F/
011 000006048300
011 000106149311
011 001006250322
011 001106351333
011 010006452344
011 010106553355
011 011006654366
011 011106755377
011 100007056388
011 100107157399
011 1010072583A:
011 1011073593B;
011 1100074603C<
011 1101075613D=
011 1110076623E>
011 1111077633F?
BinaryOctDecHexGlyph
100 00001006440@
100 00011016541A
100 00101026642B
100 00111036743C
100 01001046844D
100 01011056945E
100 01101067046F
100 01111077147G
100 10001107248H
100 10011117349I
100 1010112744AJ
100 1011113754BK
100 1100114764CL
100 1101115774DM
100 1110116784EN
100 1111117794FO
101 00001208050P
101 00011218151Q
101 00101228252R
101 00111238353S
101 01001248454T
101 01011258555U
101 01101268656V
101 01111278757W
101 10001308858X
101 10011318959Y
101 1010132905AZ
101 1011133915B[
101 1100134925C\
101 1101135935D]
101 1110136945E^
101 1111137955F_
BinaryOctDecHexGlyph
110 00001409660`
110 00011419761a
110 00101429862b
110 00111439963c
110 010014410064d
110 010114510165e
110 011014610266f
110 011114710367g
110 100015010468h
110 100115110569i
110 10101521066Aj
110 10111531076Bk
110 11001541086Cl
110 11011551096Dm
110 11101561106En
110 11111571116Fo
111 000016011270p
111 000116111371q
111 001016211472r
111 001116311573s
111 010016411674t
111 010116511775u
111 011016611876v
111 011116711977w
111 100017012078x
111 100117112179y
111 10101721227Az
111 10111731237B{
111 11001741247C|
111 11011751257D}
111 11101761267E~
Kategori:Ruby#ASCII%20 Kategori:Ruby Kategori:Programlama
Kategori:Programlama Kategori:Ruby