Binary String

e$BD9J8<:Ni$7$^$9!#e(B

Ruby1.9e$B$G$Ne(BBinaryStringe$B$N<h$j07$$$K$D$$$F<ALd$,$"$j$^$9!#e(B
e$B!Je(Bruby-list e$B$K=P$9$Y$-$G$7$?$G$7$g$&$+!)e(B
e$B=i$a$F%a!<%k$r$9$k$N$GH=CG$,$D$-$^$;$s$G$7$?!#!Ke(B

Ruby1.9e$B$Ne(BStringe$B%/%i%9e(B(e$B0J2<e(BS19e$B$HN,!K$G$O!"e(B
Ruby1.8e$B0JA0$Ne(BStringe$B%/%i%9e(B(S18e$B$HN,!K$G$Ne(B ,
[]=(idx, value)
e$B$N$h$&$J!"e(BSubstringe$B$r2p$7$J$$%P%$%H$NFI$9~$!"e(B
e$B=q$-9~$_$,$G$-$J$/$J$k$N$G$7$g$&$+!)e(B

e$B%a!<%j%s%0%j%9%H$r8+$?$j!"e(BRuby1.9e$B$r%$%s%9%H!<%k$r$7$?$j$7$^$7$?$,!"e(B
e$BAjEv$9$k%a%=%C%I$,8+$D$+$i$J$+$C$?$N$G!“e(B
e$B$J$$$b$N$H2>Dj$7$F0J2<$NOC$rB3$1$^$9!#e(B
e$B!J$”$k$J$i65$($F$$$?$@$1$^$;$s$+!)!Ke(B

e$B%P%$%H$X$N%$%s%G%C%/%9%"%/%;%9$,$G$-$J$$$H$9$k$H!"e(B
S18e$B$G$O2?$NLdBj$b$J$+$C$?<!$N$h$&$JNc$GLdBj$,H/@8$7$^$9!#e(B

=========================================
e$BNc#1!%!J2hA|=hM}!Ke(B
e$B!!!e(B256e$B3,D4$N%0%l!<%9%1!<%k$N%S%C%H%^%C%W2hA|$,e(B
e$B!!!e(BStringe$B%/%i%9$KFI$_9~$^$l$F$$$k$H$9$ke(B
e$B!!!$3$l$KBP$7$F!"NY@$9$k%T%/%;%k$NCM$Ge(B
e$B!!!J?6Q2=$9$k$$+$7A`:n$r9T$&!#e(B(e$B4JC1$N$?$a6-3&$N07$$$O>JN,!Ke(B
e$B!!!e(Bnx, ny = 10, 10
bmp = (0…(nxny)).inject(""){|s,i| s << rand(256); s} #input
data
e$B!!!e(Br = (-1…1)e$B!!e(B# neighbor index
val_x1 = bmp[0,ny] # value[x-1][0…ny]
(1…(nx-1)).each{|x|
e$B!!!e(B val_x1_y1 = bmp[ny
(x-1)+0]e$B!!e(B# value[x-1][y-1]
(1…(ny-1)).each{|y|
e$B!!!e(B val_x1_y = val_x1[y] # value[x-1][y]
e$B!!e(Bval_x1[y] =
(r.inject(0){|zx,dx|r.inject(zx){|zy,dy|zy+bmp[ny*(x+dx)+(y+dy)]}}/9.0).to_i
e$B!!!e(Bbmp[ny*(x-1)+(y-1)] = val_x1_y1
e$B!!!#ve(Bal_x1_y1 = val_x1_y
}
val_x1[ny-2] = val_x1_y1
}
bmp[ny*(nx-2)+1,ny-2] = prev_x[1,ny-2]

e$B!!!%S%C%H%^%C%W2hA|$N%G!<%?$Oe(B,e$BDL>oe(B0-255e$B$^$G$N?tCM$r$H$k%Y%/%H%k$H$7$FI=$5$l$^$9!#e(B
e$BMM!9$J2hA|=hM}%"%k%4%j%:%$O$3$N?tCMNs$KBP$7$F%i%s%@%%"%/%;%9$r$7$^$9!#e(B
e$B!!!%P%$%H%"%/%;%9$re(Bbmp_S19[i].ord, bmp_S19[i] = integer.chr
e$B$G9T$&$He(B
e$B!!!e(B(e$B!J%T%/%;%k?t!K#xe(B10e$B8D!KDxEY$N0lJ8;ze(BStringe$B$r@8@.$9$k$3$H$K$J$j$^$9!#e(B
e$B!!!$=$b$=$b?tCMNs$H;W$C$F$$$k$b$N$rItJ,J8;zNs$KJQ49$7$J$1$l$P$J$i$J$$$H$$$&$N$O!"e(B
e$B!!!O@M}E*$K$*$+$7$/!"DL>o$O!"8@8l$N0-MQ$r$7$F$$$k$H$_$J$5$l$k$H;W$$$^$9!#e(B
e$B!!!$=$&;W$&$H$3$N$h$&$JA:n$Oe(BArray#pack,String#unpacke$B$r7PM3$7$Fe(BArraye$B%/%i%9$GA:n$re(B
e$B!!!9T$&$3$H$re(BS19e$B$,6/@)$7$F$$$k$3$H$K$J$j$^$9!#e(B

e$BNc#2!%e(B(e$B%P%$%*%$%s%U%)%^%F%#%/%9!Ke(B
e$B!!!e(B2e$BK$Ne(BDNAe$BG[Ns$N4V$NN;wEYe(B(edit distance)e$B$rF0E*7W2hK!$N0l<oe(B e$B!!!!!!!Je(BNeedleman-Wunsche$B%"%k%4%j%:%!K$G5a$a$ke(B
e$B!!!e(Bgap_score, substitution_score = -3,
Array.new(4){|i|Array.new(4){|j|
(i==j ? 0 : -1)}}
n1, n2 = 10, 10
nuc = “ACGT” # nucleotide (or DNA) character set
dna1, dna2 = [n1, n2].map{|n| (0…n).inject(""){|s,i|s <<
nuc[rand(4)]; s}} # input data
nuc_to_ord = (0…4).inject({}){|h,i|h[nuc[i]]=i; h} # ad hoc
encoding
table
e$B!!!e(B[dna1, dna2].each{|dna| (0…dna.size).each{|i| dna[i] =
nuc_to_ord[dna[i]]}} # dna.encode(“DNA”)
cur_scores = Array.new(n2+1)
prev_scores = Array.new(n2+1){|i| gap_score * i}
(1…n1).each do |i1|
e$B!!!e(Bcur_scores[0] = (gap_score * i1)
e$B!!!e(B(1…n2).each do |i2|
e$B!!!e(B cur_scores[i2] = [prev_scores[i2-1] +
substitution_score[dna1[i1-1]][dna2[i2-1]],
e$B!!!e(B prev_scores[i2] + gap_score,
e$B!!!e(B cur_scores[i2-1] + gap_score
].max
end
end
edit_distance = cur_row_scores[n2]

e$B!!!0lJ8;z$NA^F~!&:o=|$K$Oe(B-3e$B$N%Z%J%k%F%#$rM?$(!“e(B
e$B!!!J8;z$NCV49$Ke(B-1e$B$N%Z%J%k%F%#$rM?$($k$H$7$?$H$-!“e(B
e$B!!!JRJ}$NG[Ns$rJT=8$7$F$b$&JRJ}$NG[Ns$rF@$k$?$a$K:GDcI,MW$J%Z%J%k%F%#$,5a$^$j$^$9!#e(B
e$BNc$,E,Ev$G$J$+$C$?$+$b$7$l$^$;$s$,!“MW$Oe(BDomainSpecifice$B$J%(%s%3!<%G%#%s%0K!$re(B
e$B!!!e(BRubye$B>e$G=q$/$N$K$b?tCM$X$Ne(Bindexe$B%”%/%;%9$Oe(B
e$B!!!=EMW$G$J$$$+$H$$$&$3$H$r$$$$$?$+$C$?$N$G$9!#e(B
e$B???7$7$$%(%s%3!<%G%#%s%0$N9q:]I8=`$,8=$l$k$3$H$O>/$J$/$F$b!“e(B
e$B!!!e(BApplicatione$B!!e(BSpecifice$B$JFH<+e(BEncodinge$B$re(BRubye$B%9%/%j%W%H$G=q$-$?$$$3$H$O$”$k$G$O$J$$$G$7$g$&$+!)e(B
e$B!!!$^$?!”$=$NL\E*$r@55,I=8=$de(Bbytes.eache$B$N$_$G2L$?$9$3$H$Oe(B
e$B!!!Fq$7$$$3$H$b$”$k$N$G$O$J$$$G$7$g$&$+!)e(B

e$B!!!&e(BS19e$B$G$O$3$N$h$&$Je(Bbytee$BNs$N;H$$$+$?$KBP$7$F87$7$$%Z%J%k%F%#$rM?$($F$$$k$H$$$($^$9!#e(B
e$B!!!&$b$A$m$s$3$l$i$NA`:n$Oe(BStringe$B$+$ie(BArray#pack,String#unpacke$B!!$r;H$C$Fe(BArraye$B>e$G9T$&$3$H$b$G$-$^$9!#e(B
e$B!!!&$7$+$7Nc#1!“Nc#2$N$I$A$i$G$bF~NO$N%5%$%:$,?t==!”?tI4e(BMegabytese$B$K$J$k$3$H$Oe(B

e$B!!!DA$7$/$"$j$^$;$s!#e(B
e$B!!!&e(BS18e$B$G$OAGD>$K$+$1$?$N$K$J$s$Ge(BS19e$B$G$3$N$h$&$J5-9fE*$J0z?t$N!Je(Bunpack,pack)
e$B!!%3!<%I$rA^F~$7$J$$$H$$$1$J$$$N$+$H$$$&5$$K$b$J$j$^$9!#e(B
e$B!!!&e(BRubye$B$N7W;;B.EY$G$O!">e$N$h$&$J7W;;$G??$K;H$($k%i%$%V%i%j$O$G$-$J$$$H$$$&0U8+$b$"$k$+$b$7$l$^$;$s!#e(B
e$B!!!$7$+$7!"Nc$(8=;~E@$G%Q%V%j%C%/$J%i%$%V%i%j$H$7$FBQ$($k%9%T!<%I$G$J$/$H$b!"e(B

e$B!!!%W%m%H%?%$%W$D$/$j$d!“e(B
e$B!!!$=$s$J$K%9%1!<%k$NBg$-$/$J$$%W%i%$%Y!<%H$JLdBj$G$N;H$$F;$O$H$F$b9-$$$N$G$O$J$$$G$7$g$&$+!)!!!e(B
e$B!!!e(B(e$B;d$K$H$C$F$O$=$&$G$9!Ke(B
e$B!!!&e(BS18e$B$^$G$N%P%$%H%”%/%;%9$O!"$=$s$J$K$h$/$J$$;EMM$@$C$?$N$G$7$g$&$+!)e(B
e$B!!!&$3$N$h$&$J%P%$%HNs$N07$$J}$G$I$s$J$9$P$i$7$$%"%W%j%1!<%7%g%s$,@8$^$l$k$+$o$+$i$J$$$N$Ke(B
e$B!!!$=$N$h$&$J5!G=$r$4$C$=$j<N$F$F$b$h$$$N$G$7$g$&$+!)e(B

==================================

e$B;d$N0U8+$O!“e(BStringe$B$K$O%P%$%HNs$K%$%s%G%C%/%9$G%i%s%@%`%”%/%;%9$7!"e(B
e$B$=$N?tCM$r%@%$%l%/%H$KFI$_=q$-e(B
e$B$9$k%a%=%C%I$,I,MW$J$N$G$O$J$$$+$H$$$&$b$N$G$9!#e(B

e$B;d$O$3$Ne(B6e$BG/4V$[$I$G!"?tI4$Ne(BRubye$B!!e(BScripte$B$r=q$$$F$-$^$7$?!#e(B
e$B$7$+$7!"%W%m%0%i%_%s%0$K$D$$$F$O$$$^$@AG?M%l%Y%k$G!“e(B
Rubye$B$NFbIt9=B$$b$h$/CN$i$:!“e(B
Encodinge$B$K$D$$$F$b!”$A$g$C$H%0!<%0%k$GD4$Y$?DxEY$G$”$j!"e(B
e$B$I$N$h$&$J;EMM$,$h$$$+$r8@$($kN)>l$G$O$J$$$N$OJ,$+$C$F$$$^$9!#e(B

e$B$G$9$,!"AG?M$J$j$NK=O@$r0J2<$K=R$Y$?$$$H;W$$$^$9!#e(B

e$B;d$K$H$C$F%Y%9%H$J;EMM$O<!$N$h$&$J$b$N$G$9!#e(B
my_best_string[idx] e$B!!e(B #=>
string_S19[i].orde$B!!$rJV$9!#e(B
my_best_string[idx] = integer #=> string_S19[i] =
integer.chr(string_S19.encoding)
e$B!)J8;z!!!e(B e$B!!!e(B #=> e$B!)J8;ze(B.ord

e$BMxE@!'e(B
e$B#0!%%P%$%HNs$r?tCMNs$H;W$C$?$H$-:G$b<+A3!#e(B
e$B!!#1!%e(BASCIIe$BJ8;zNs!"%P%$%J%jNs$N>l9g$Ke(BS18e$B$H2?$NJQ2=$b$J$$!!e(B
e$B!!!e(BS18e$B$r<+A3$Ke(BEncodinge$BBP1~$K$7$?$b$N$H;W$($k!#e(B
e$B!!#2!%J8;z$Ne(Bordinale$B$,e(BFixnume$B$K<}$^$k8B$jJ8;z$NHf3S$,9bB.!J?dB,!Ke(B
e$B!!#3!%%9%/%j%W%H$Ne(BEncodinge$B$,J8;zNs$Ne(BEncodinge$B$HEy$7$/e(B
e$B!!!$J$1$l$P7k6IJ8;zNsCf$G$b?t$G;XDj$7$J$1$l$P$J$i$J$$!#e(B"\u{0x…}"
e$B!J#4e(B.e$B!Ke(BEncodinge$B$,e(BASCIIe$B$G$J$$$H$-%i%s%@%`%"%/%;%9$G$J$$e(B(e$BB?J,!K$H$$$&$N$Oe(BS19e$B$G$bF1$8$J$N$GLdBj$J$$e(B

e$B7gE@!'e(B
e$B!!#1!%J8;z$r@0?tCM$K$7$?$H$-e(BEncodinge$B>pJs$r<:$&$N$GJ#?te(BEncodinge$B$,:.$6$k$H$-0BA4$G$J$$!#e(B
e$B!!!e(B=>e$B!&0BA4@-$,5?$o$l$k$H$-$O!"0lJ8;ze(BStringe$B$r;H$($P$h$$$N$G$O$J$$$G$7$g$&$+!)e(B
e$B!!!&?dB,$G$9$,!"e(Bhexe$B$N?tCM$rD>@\07$&J}$,%W%m8~$1$J$N$G$O$J$$$G$7$g$&$+!)e(B

e$B!!!e(BRubye$B$O%W%m8~$1$K==J,$JG[N8$,$J$5$l$k$O$:$G$9!#e(B
e$B!!!&e(BEncodinge$B$K$D$$$F>$7$/$J$$$N$G!":,K\E*$JLdBj$,$"$k$N$+$b$7$l$^$;$s$,e(B…
e$B!!!Je(Bcharacter_string.ord.chr(character_string.encoding)e$B$,0l0U$G$J$$$H$+e(B…
ord e$B$NCM$,e(Bascii-7bite$BJ8;zItJ,$Ge(Bincompatible
e$B$Je(BEncodinge$B$,$"$k$H$+e(B…e$B!)e(B)
e$B!!!&J8;z%j%F%i%k$r=q$-$K$/$/$J$k!)!!$7$+$7!"=jA’!!!)J8;z!!$H!!e(B"e$BJ8;z!I$O0l;z$7$+0c$$$^$;$s!#e(B
e$B!!!&$=$l$Ke(BS18e$B$^$G$K$=$s$J$KB?$/$NLdBj$,$"$C$?$N$G$7$g$&$+!)e(B
e$B!!!e(B
e$B!&e(BRubye$B$N$b$C$H$b=EMW$J1~MQ$O%&%’%V%"%W%j%1!<%7%g%s$J$N$G!"e(B
e$B!!!e(BHTTPe$B$+$i$I$s$Je(BEncodinge$B$NJ8;zNs$,Mh$k$+J,$+$i$J$$>u67$KBP1~$9$k$?$a!"e(B

e$B!!!e(BWebe$B8@8l$H$7$F%(%s%3!<%G%#%s%0$Ne(B"e$B7?e(Be$B0lCW@-!&0BA4@-!I$r=E;k$9$k$N$@$H8@$o$l$l$Pe(B
e$B!!!JV$98@MU$O$J$$$N$G$9$,!#!#!#e(B
e$B!!!$7$+$7!"$=$NBe=~$O;d$K$O$H$F$bBg$-$/;W$($^$9!#e(B

e$B!!#2!%0lJ8;ze(BStringe$B$r<hF@$9$k$N$Ke(Bstring[i]e$B$H=q$-$?$/$J$C$F$7$^$&!#e(B
e$B!!!e(B=>e$B!&;d$be(BRubye$B$rCN$C$?$3$m$O$=$&$G$7$?!#$7$+$7:#$G$O?tCM$rJV$9e(BS18e$B$N;EMM$KG<F@$7!“e(B
e$B!!!e(BRubye$B$i$7$$e(B(e$B$H;d$,>!<j$K;W$C$F$$$k!K7Z2w$5$de(BPragmatice$B$5$,5$$KF~$C$F$$$^$9!#e(B
e$B!!!&e(BString#e$B$N$h$&$JBg;v$J%a%=%C%I$,e(BString#[i,1]e$B$N5!G=E*$J%(%$%j%”%9$G$h$$$b$N$G$7$g$&$+!)e(B
e$B!!!&e(BS19e$B$K$Oe(BString#chre$B$,$"$k$N$G$3$l$r0z?t$D$-$K$7$Fe(Bstr.chr(idx)e$B$J$I$H$9$l$P!"e(B
e$B!!!e(Bstr[idx,1],str[idx…idx]e$B$h$j$O0U?^$,L@3N$K$J$k$+$bCN$l$^$;$s!#e(B

e$B!!#3!%0lJ8;z$r=q$-9~$$N$Ke(Bstring[i]="e$B$"!I$H=q$-$?$/$J$C$F$7$^$&!#e(B e$B!!!!!!e(B=>e$B!&3N$+$K$=$&$+$bCN$l$^$;$s$,!"e(Bstring[i]="e$B$"$$$&$($*!I$J$I$H$NO"B3@-$r9M$($k$H!"e(B e$B!!!!!!!!!!0lJ8;z$NCV$-49$($H$O9M$($i$l$:!"e(B e$B!!!!!!!!!!ItJ,J8;zNs$NCV49!Je(Bstring[i,1]="e$B$"e(B") e$B$H9M$($kJ}$,E,@Z$K;W$o$l$^$9!#e(B e$B$=$l$KHf$Y$k$H!!e(Bstring[i] = integer e$B$NJ}$Oe(B e$B!!!!!!!!!!$^$5$K0lJ8;z$KBP$9$kBeF~$H$$$&0UL#$7$+;}$A$($:$h$jE,@Z$J$N$G$O$J$$$G$7$g$&$+!)e(B e$B!!!!!!!!!&0lJ8;z$N=q$-9~$_$Ke(Bstring[i..i]e$B$de(Bstring[i,1]e$B$r;H$$$?$/$J$$$H$$$&$N$O$"$k$+$b$7$l$^$;$s!#e(B e$B!!!!!!!!!!$7$+$7!"$3$l$O>e$K5s$2$?MxE@$H$N%P%i%s%9$G9M$($k$He(B e$B!!!!!!!!!!$=$l$[$IBg$-$J$b$N$G$O$J$$$N$G$O$J$$$G$7$g$&$+!)e(B e$B!!!!!!!!e(B([]e$B$H$NBP>N@-$r5>@7$K$7$F!"e(B[]=(i,val)e$B$,e(BIntegere$B$He(BStringe$B$NN>J}$Ne(Bvale$B$r<u$1<h$k!!!!!!!!!!!Je(BS18#<<e$B!!$N$h$&$K!K$H$$$&:v$b$"$k$+$bCN$l$^$;$s!K!!#4!%!Ve(Bstring[i]e$B$OJ8;zNs!W$H%Q%V%j%C%/$K$$$C$?0J>e$"$H$K$OLa$l$J$$!#!!!!!!e(B=>e$B!&$*;!$7$7$^$9!#$3$l$O$"$/$^$GAG?M$NK=O@$G$9!#!!!!!!!!!&$7$+$7!"e(BBytee$BNs$N<h$j07$$$K$D$$$F$O!"!!!!!!!!!!$^$@5DO@$,B3$$$F$$$k$h$&$G$9$N$G!"0le_$NK>$_$r$+$1$F!!!!!!!!!!;W$$@Z$C$?0U8+$r=R$Y$5$;$F$$$?$@$$$F$$$^$9!#!!$=$NB>$N0F!'e(BString#ord(idx)e$B!!e(B=>e$B!!?tCM!!!!e(B=>e$B!!!&?tCMNs$H9M$($?$H$-!"e(Bordinale$B$H$$$&L>A0$OITE,@Z$G$O!)!!!!!!!!!&=q$-9~$_$Ke(Bset_ord(idx, value)e$B!!!)e(BString#get(idx), String#set(idx, value) => e$B!&$&!<$s!#$3$&$J$C$?$i;DG0$G$9!#e(B[ByteStrine$B#g$He(BString] e$B$de(B[String:BINARYe$B$He(BStringe$B!'e(BASCII-8BIT]e$B$J$I!"0[$J$k%/%i%9$d>uBV$Ge(B[],[]= e$B$,J8;zNs$rJV$7$?$j?tCM$rJV$7$?$j$9$k$+$,JQ$o$k!#!!!!e(B=>e$B!!!&$I$A$i$N?6$kIq$$$rK>$$+$G!“e(B
str.to_byte_st!
r, str.force_encoding
e$B$J$I$N%3%s%P!<%8%g%s$,!!!F~$jMp$l$k$h$&$K$J$k$N$G$O!)!!!&$I$s$J>uBV$+J,$+$i$s$+$i$H$K$+$/e(Bforce_encodinge$B$9$k!”$H$$$&$h$&$J!!!%W%m%0%i%%s%0$N=,47$,$G$-$?$ie(BRubye$B8@8l$Ne(B
e$B!!!e(BLove/hatee$B!!e(Bratio
e$B$,K=Mn$9$k$N$G$O$J$$$G$7$g$&$+!)8=:
$Ne(BRuby1.9e$B$N;EMM$K;j$k$^$G$K$OKDBg$J5DO@$,@Q$_=E$M$i$l$F$$$k$3$H$H;W$$$^$9!#e(Bstring[i]=e$BJ8;zNs$,7hDj$7$?$N$O$:$$$V$s@N$N$3$H$N$h$&$G$=$N7P0^$r%a!<%j%s%0%j%9%H$N%"!<%+%$%V$+$i$O8+$D$1$k$3$H$O$G$-$^$;$s$G$7$?!#;d$NDs0F$7$?$h$&$J$3$H$,$&$^$/$$$+$J$$$3$H$K!“G<F@$N9T$/M}M3$,$”$l$P4JC1$G$h$$$N$G!"@bL@$7$F$$$?$@$1$^$;$s$+!)$=$N$H$-$O!“AGD>$K$”$-$i$a$k$3$H$K$7$^$9!#e(BRuby1.9e$B$O!“e(BEnumeratore$B$J$I$KAG@2$i$7$$5!G=$,$”$je(B,e$B$9$0$K$b;H$$$?$$$N$G$9$,!">e$K=R$Y$?LdBj$N$?$a$K!"0\9T$Ke(Breluctante$B$K$J$C$F$$$^$9!#$I$&$>$h$m$7$/$*4j$$$7$^$9!#e(B

In article [email protected],
“NARUSE, Yui” [email protected] writes:

e$B$“$k;~E@$^$Ge(B ASCII e$B$G=q$$$F$$$?%=!<%9$G!”$“$k$H$-e(B UTF-8 e$B$NJ8e(B
e$B;zNs%j%F%i%k$r=q$$$?$H$-!”$=$N%U%!%$%kCf$NB>$N$9$Y$F$NJ8;zNse(B
e$B%j%F%i%k$be(B UTF-8 e$B$K$J$k!“$H$$$&$N$O$A$g$C$H%J%K$@$J!”$H;W$$e(B
e$B$^$9!#e(B

e$B$=$&$$$($P!“?M4V$NET9g$G$O$J$/<BAu$NET9g$G$9$,!”@-G=$NOC$b$"e(B
e$B$j$^$9!#e(B

ASCII-8BIT e$B$de(B US-ASCII e$B$O%7%s%0%k%P%$%H%(%s%3!<%G%#%s%0$J$Ne(B
e$B$G!"J8;zC10L$N%$%s%G%C%/%9$r4JC1$K$G$-$k$3$H$,%(%s%3!<%G%#%se(B
e$B%0$r8+$?$@$1$G$o$+$j$^$9!#e(B

e$B$=$l$KBP$7!“e(BUTF-8 e$B$J$I$N%^%k%A%P%$%H%(%s%3!<%G%#%s%0$@$H$=$le(B
e$B$J$j$KLq2p$JOC$K$J$j$^$9!#J8;zNs$Ke(B ASCII e$BJ8;z$7$+F~$C$F$$$Je(B
e$B$/$F$b!”$=$N$3$H$r3NG’$G$-$F$$$k$+$H$$$&LdBj$,$"$C$FC1=c$K$Oe(B
e$B$$$-$^$;$s!#e(B

e$B$3$NBP:v$H$7$F!“e(B
b’) ASCII only e$B$NJ8;zNs$O>o$Ke(B US-ASCII e$B$rJV$9e(B
e$B$H$$$&<j$b$”$k$N$+$Je(B

e$B$3$l$OJ8;zNs$Ke(B ASCII e$BJ8;z$7$+F~$C$F$$$J$$$3$H$rD4$Y$kI,MW$,e(B
e$B$“$k$N$G!”$A$g$&$I>e$G=R$Y$?3NG’$NOC$K$D$J$,$j$^$9!#e(B

e$B$^$!!“J8;zNs$ND9$5$KHfNc$7$?;~4V$r$+$1$F$$$$$N$G$”$l$P$$$$$se(B
e$B$G$9$,!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33188] Re: Binary String”
on Sun, 20 Jan 2008 00:10:55 +0900, Hidetoshi NAGAI
[email protected] writes:

|Ruby 1.8 e$B$+$i$Ne(B Marshal e$B7PM3e(B String e$B$N$3$H$^$G9M$($k$H!$e(B
|UNDEFINED-8BIT (dummy encoding e$B$r$3$l$K3d$j?6$k$N$b2D!)e(B) e$B$He(B
|Encoding.default_undefined e$B$H$r?7@_$7$?>e$G!$e(B
|Ruby 1.9 e$B$G$Oe(B Marshal e$B$N%U%)!<%^%C%H%P!<%8%g%s$re(B
|e$B>e$2$F$7$^$&$H$$$&$N$,0lHV$9$C$-$j$7$=$&$J5$$,$7$^$9!%e(B

e$B!V0lHV$9$C$-$j!W$H$$$&4p=`$,$h$/$o$+$i$J$$$N$G$9$,!";d$N<g4Qe(B
e$B$G$O$o$+$i$J$$$b$N$OA4It!Ve(BASCII-8BITe$B!W$H$$$&$N$,0lHV$9$C$-$je(B
e$B$7$F$$$^$9!#e(B

e$B$,!“$=$l$G$O:$$k%1!<%9$b!”$b$7$+$7$?$i$“$k$G$7$g$&$+$i!”$=$Ne(B
e$B$h$&$J>l9g$K$O!"e(Bloade$B$N0z?t$H$7$F!"e(B(1.8e$B$+$iMh$?$h$&$Je(B)e$B%(%s%3!<e(B
e$B%G%#%s%0;XDj$,$J$$J8;zNs$KIUM?$9$k%(%s%3!<%G%#%s%0$N;XDj$r5ve(B
e$B$9$H$$$&$3$H$O9M$($F$b$h$$$H;W$C$F$$$^$9!#e(B

|e$B0J2<!$9M$(0c$$$r$7$F$$$?$i$9$_$^$;$s!%e(B
|
|Ruby 1.8 e$B$G$Ne(B Marshal e$B$G$O2?$i$+$Ne(B encoding e$B$rA[Dj$7$F$$$k$+!$e(B
|encoding e$B>pJs$rJL$KJ]B8$7$F$$$k$+$N2DG=@-$,9b$$$H;W$o$l$^$9!%e(B
|e$B$3$N>l9g!$?dB,$Ge(B encoding e$B$rM?$($F$b?dB,$;$:$Ke(B ASCII-8BIT e$B$H$7$F$b!$e(B
|e$BB?J,!$$I$A$i$bITJX$@$m$&$H;W$$$^$9!%e(B
|e$B$G!$e(BRuby 1.9 e$B$H$7$F$O!$e(BString e$B$Ke(B encoding e$B$OI,?$G$"$k$H9M$($k$H!$e(B
|Marshal e$B$G$be(B encoding e$B$rJ]B8$7$J$1$l$P$J$i$J$$$O$:$G$9!%e(B
|e$B$=$N0UL#$G$O!$e(BMarshal e$B$N%U%)!<%^%C%H%P!<%8%g%s$O>e$2$k$Y$-$He(B
|e$B8@$C$F$$$$$N$G$7$g$&$+!)e(B

Marshal(1.9)e$B$G$O%(%s%3!<%G%#%s%0$Oe(B"encoding"e$B$H$$$&%$%s%9%?%se(B
e$B%9JQ?t$H$7$FJ]B8$5$l$k$N$G!"e(B1.8e$B$G$bLdBj$J$/FI$a$^$9!#$N$G!“e(B
e$B$3$NE@$+$i$O%U%)!<%^%C%H%P!<%8%g%s$r>e$2$J$1$l$P$J$i$J$$I,A3e(B
e$B@-$O$”$j$^$;$s!#e(B

|e$BLdBj$Oe(B Ruby 1.9 e$B$Ge(B Ruby 1.8 e$B$Ne(B Marshal e$B7PM3e(B String e$B$re(B
|e$BFI$_9~$s$@>l9g$H$$$&$3$H$G$9$h$M!)e(B
|
| * e$B$3$N>l9g!$e(BMarshal e$B7PM3e(B String e$B$Ne(B encoding e$B$Oe(B UNDEFINED_8BIT e$B$K$9$k!%e(B
|
| * Encoding.default_undefined e$B$N%G%U%)%k%HCM$Oe(B ASCII-8BIT e$B$H$7!$e(B
| UNDEFINED_8BIT e$B$r@_Dj$9$k$3$H$O$G$-$J$$$b$N$H$9$k!%e(B
|
| * UNDEFINED_8BIT e$B$Ne(B String e$B$r=hM}$9$k:]$K$O!$$=$Ne(B encoding e$B$re(B
| Encoding.default_undefined e$B$NCM$G$“$k$H$7$F=hM}$9$k!%e(B
| UNDEFINED_8BIT e$B$Ne(B String e$B$+$i$N=hM}7k2L$H$7$F@8@.$5$l$kJ8;zNs$Ne(B
| encoding e$B$O!$$=$N;~E@$Ne(B Encoding.default_undefined e$B$NCM$H$7!$e(B
| UNDEFINED_8BIT e$B$,@Dj$5$l$k$3$H$O$J$$$b$N$H$9$k!%e(B
|
| * e$B;2>H$5$l$?$@$1$Ne(B String e$B$r!$e(BUNDEFINED_8BIT e$B$+$ie(B
| e$B8=:
$Ne(B default_undefined e$B$NCM$KJQ99$9$Y$-$+$I$&$+$OMW8!F$!%e(B
| e$B;2>H$@$1$J$iJQ99$NI,MW$O$J$$$H$$$&5$$b$9$k$,!$e(B
| index e$B$@$1$rF@$?8e$Ge(B default_undefined e$B$NCM$rJQ99$9$k$H!$e(B
| index e$B$,@5$7$/$J$/$J$k2DG=@-$,$”$k!%e(B
| e$B$H$O$$$(!$e(Bread e$B$G=q$-49$($,5/$3$k$H$7$?>l9g$Oe(B
| e$B$5$i$K:$$C$?$3$H$K$J$k2DG=@-$,9b$$!%e(B
| e$B;2>H$@$1$J$i$Pe(B encoding e$B$OJQ99$;$:!$$=$N8e$N07$$$Oe(B
| e$B!V<+8J@UG$!W$H$9$k$H$$$&$N$,BEEv$J@~$+$b!%e(B
|
|e$BNc$($P!$e(BMarshal e$B%G!<%?$KFCDj$Ne(B encoding e$B$rA[Dj$7$F$$$k>l9g$Oe(B
|e$BC1=c$Ke(B default_undefined e$B$K$=$Ne(B encoding e$B$r@_Dj$9$l$P$h$$$7!$e(B
|Marshal e$B%G!<%?$NCf$Ke(B encoding e$B;XDj$r4^$s$G$$$k>l9g$O!$e(B
|e$BJ8;zNsA`:n$NA0$K$=$Ne(B encoding e$B$re(B default_undefined e$B$Ke(B
|encoding e$B$r$r@_Dj$9$l$P$h$$!%e(B

e$B$J$s$@$+$($i$/J#;($G$9$,!“e(Bdefault_undefinede$B$r%W%m%0%i%Cf$+$ie(B e$BJQ99$G$-$k$J$i$=$l$O0l<o$NBg0hJQ?t$J$N$GLLE]$J!V>uBV!W$rF3F~e(B e$B$9$k$3$H$K$J$j$^$9!#%9%l%C%I%;!<%U$8$c$J$/$J$k$7!#$=$l$O$"$^e(B e$B$j$*4+$a$G$O$"$j$^$;$s!#5U$KJQ99$G$-$J$$$J$i!":#EY$O$$$m$$$me(B e$B$J$H$3$m$+$i$NF~NO$5$l$?%(%s%3!<%G%#%s%0$,;XDj$5$l$F$$$J$$J8e(B e$B;zNs$r%W%m%0%i%A4BN$G0l3g$K07$&I,MW$,$”$j!"$=$l$O$=$l$G=@Fpe(B
e$B@-$K7g$1$k$h$&$K;W$$$^$9!#e(B

e$B$G!“e(BMarshale$B$N7o$OK:$l$F!“85$Ne(BTke$B$NOC$KLa$k$H!”;d<+?H$Oe(B
Identitye$B$H$$$&%(%s%3!<%G%#%s%0e(B(e$B$*$=$i$/$Oe(Bdummy)e$B$rF3F~$9$k$3$He(B
e$B$K2ACM$,$”$k6ILL$O$“$j$($k$H;W$C$F$$$^$9!#L>A0$O$H$b$+$/!#$7e(B
e$B$+$7!”$=$l$Oe(BTke$B$+$i$J$s$i$+$NM}M3$G%(%s%3!<%G%#%s%0$,e(BIdentity
e$B$G$“$kJ8;zNs$re(BRubye$BB&$KF3F~$7$J$1$l$P$$$1$J$$%1!<%9$,$”$j!“$+e(B
e$B$D!”$=$N%(%s%3!<%G%#%s%0$,e(BASCII-8BITe$B$G$OL@$i$+$K$^$:$/!"$=$le(B
e$B$G$O$J$$e(BIdentitye$B$H$$$&%(%s%3!<%G%#%s%0$G$J$1$l$P$J$i$J$$$H<(e(B
e$B$5$l$?>l9g$K8B$j$^$9!#e(B

e$B8=;~E@$G$O!“%P%$%J%j$He(BASCII-8BITe$B$,6hJL$G$-$J$/$F$^$:$$%1!<%9e(B
e$B$K$D$$$F$O!“e(B(e$B$$$/$D$+$NNc30$r=|$$$Fe(B)e$BL@3N$K;XDj$5$l$F$$$J$$$he(B
e$B$&$K;W$$$^$9!#$”!”$b$A$m$s!V%P%$%J%j$K!Ve(BASCIIe$B!W$H$$$&L>A0$,$De(B
e$B$$$F$$$k$N$,5$$KF~$i$J$$!W$H$$$&M}M3$b$“$k$N$G$9$,!”$=$3$O$=e(B
e$B$l!"Nr;KE*;v>p$J$N$GL$r$D$V$C$F$$$?$@$/$H$7$F!#e(B

e$B;D$j$NE@$Oe(BASCIIe$BJ8;z$@$1$+$i9=@.$5$l$k%j%F%i%k$N%(%s%3!<%G%#%se(B
e$B%0$Oe(BASCII-8BITe$B$+$iH/@8$9$k$H;W$&$N$G$9$,!"$3$NE@$K$D$$$F$O6ae(B
e$B$$$&$A$K$J$K$+JL$N$b$Ne(B(e$B$?$V$se(Bscript
encodinge$B$+e(BUS-ASCII)e$B$,IUM?e(B
e$B$5$l$k$H;W$C$F$/$@$5$$!#$I$A$i$+$^$@7h?4$G$-$F$J$$$1$I!#e(B

                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33195] Re: Ruby1.9
Stringe$B!!%P%$%HNs$X$N%$%s%G%C%/%9!!%”%/%;%9e(B"
on Sun, 20 Jan 2008 03:48:46 +0900, [email protected] writes:

|> e$B$?$V$s!“FCDj$N0LCV$N%P%$%H$rFI$s$@$j=q$$$?$j$G$-$l$PNI$$$N$@e(B
|> e$B$H;W$&$N$G$9$,!”$J$K$+$=$l$>$l$K$U$5$o$7$$!“4J7ie(B(e$B$G$-$l$Pe(B)e$B$+e(B
|> e$B$DE,@Z$JL>A0$,$”$j$^$;$s$+$M!#e(B
|
|e$B$=$N$^$^e(Bbytee$B$G$$$$5$$,$7$^$9!#e(B

e$B$^$"!"4J7i$G$9$M!#e(B

|s = “abcde”
|s.byte(3) # => 100
|s.byte(3, 101)
|s # => “abcee”

e$BFqE@$O!Ve(Bs.byte(3,101)e$B!W$,$$$^$$$A!VBeF~46!W$,$J$$$H$3$m$G$7$ge(B
e$B$&$+!#J8K!$r3HD%$7$F!Ve(Bs.byte(3)=101e$B!W$r5v$9$h$&$K$9$k$+$J!#e(B

|e$B$"$k$$$Oe(BBytese$B%/%i%9$rMQ0U$7$Fe(BString#bytee$B$G:n@.$G$-$k$H$$$$$+$b$7$l$^$;$s!#e(B

e$B$3$N>l9g$Oe(BBytese$B%/%i%9$O%a%b%jNN0h$re(BStringe$B$H6&M-$9$k$N$G$7$ge(B
e$B$&$+!#$=$l$O$=$l$GLLGr$$$H;W$$$^$9$,!#e(B

|s = “abcde”
|s.byte # "abcde"e$B$N%P%$%HNs%%V%8%’%/%He(B
|s.byte[3] # => 100
|s.byte[3] = 101 # e$BGK2uE
99?7e(B
|s # => “abcee”
|
|e$B%$%s%G%C%/%9$K$Oe(BRangee$B$b;XDj$G$-$k$H$$$$$G$9!#e(B

e$B$=$N>l9g$O1&JU$KJ8;zNse(B(e$B$^$?$Oe(BBytes)e$B$r;XDj$9$k$o$1!)e(B

e$B$=$&$$$($P!"<+J,$G8@$$=P$7$H$$$F$J$s$@$1$IJ#?t7A$JL>A0$N%/%ie(B
e$B%9$C$F$N$O$$$+$,$J$b$N$+!#e(B

                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

From: Yukihiro M. [email protected]
Subject: [ruby-dev:33196] Re: Ruby1.9
Stringe$B!!%P%$%HNs$X$N%$%s%G%C%/%9!!%"%/%;%9e(B
Date: Sun, 20 Jan 2008 03:58:32 +0900

|s = “abcde”
|s.byte(3) # => 100
|s.byte(3, 101)
|s # => “abcee”

e$BFqE@$O!Ve(Bs.byte(3,101)e$B!W$,$$$^$$$A!VBeF~46!W$,$J$$$H$3$m$G$7$ge(B

e$B$=$&$J$s$G$9$h!#e(B

|e$B$"$k$$$Oe(BBytese$B%/%i%9$rMQ0U$7$Fe(BString#bytee$B$G:n@.$G$-$k$H$$$$$+$b$7$l$^$;$s!#e(B

e$B$3$N>l9g$Oe(BBytese$B%/%i%9$O%a%b%jNN0h$re(BStringe$B$H6&M-$9$k$N$G$7$ge(B
e$B$&$+!#$=$l$O$=$l$GLLGr$$$H;W$$$^$9$,!#e(B

e$B$O$$!#e(B

|s = “abcde”
|s.byte # "abcde"e$B$N%P%$%HNs%%V%8%'%/%He(B
|s.byte[3] # => 100
|s.byte[3] = 101 # e$BGK2uE
99?7e(B
|s # => “abcee”
|
|e$B%$%s%G%C%/%9$K$Oe(BRangee$B$b;XDj$G$-$k$H$$$$$G$9!#e(B

e$B$=$N>l9g$O1&JU$KJ8;zNse(B(e$B$^$?$Oe(BBytes)e$B$r;XDj$9$k$o$1!)e(B

e$B$=$&$G$9!#e(BBytes#[]e$B$de(BBytes#[]=e$B$Oe(BArray#[]e$B$N$h$&$Ke(BRangee$B$J$I$b;XDj$G$-$k$h$&$K$7$F!"e(B
e$B1&JU$K$OJ8;zNs!“e(BBytese$B!”@0?t$NG[NsEy$,;XDj$G$-$l$P$$$$$+$b!#e(B

e$B$=$&$$$($P!"<+J,$G8@$$=P$7$H$$$F$J$s$@$1$IJ#?t7A$JL>A0$N%/%ie(B
e$B%9$C$F$N$O$$$+$,$J$b$N$+!#e(B

ByteArraye$B$H$+!#e(B

e$B@.@%$G$9!#e(B

Hiroshi Ichikawa wrote:

e$B$H8@$C$F$$$^$9$7!D!#e(B

e$B$J$s$H$J$/!"%P%$%J%j$HL@<($7$?$$;~$K$@$1L@<($7$F$$$$F!"$h$/$o$+$i$J$$>le(B
e$B9g$O$h$/$o$+$i$J$$$^$^$h$7$J$K$d$C$F$$$C$F!"$J$s$H$+$J$k$@$m$&!"$H$$$&$he(B
e$B$&$JJ70O5$$r46$8$k$N$G$9$,!"e(BRuby 1.9 e$B$K$
$$$F$Oe(B binary
encoding e$B$NJ8;zNse(B
e$B$H!“e(BASCII-8BIT
e$B$NJ8;zNs$O7k9g!&Hf3SIT2DG=$@$+$iJLJ*!”$D$^$j!"%f!<%6!<$,e(B
Tke$BEy$KEO$9%P%$%J%jJ8;zNsA4$F$re(B binary
e$B$K$7$J$1$l$P$J$i$J$$$3$H$ON;2r$5$le(B
e$B$F$^$9!)$5$9$,$K$=$l$C$F$"$^$j$KLLE]$J$N$G$O$J$$$+$J$!$H;W$C$F$$$k$N$G$9$,!#e(B

e$B@.@%$G$9!#e(B

[email protected] wrote:

e$B$"$k$$$Oe(BBytese$B%/%i%9$rMQ0U$7$Fe(BString#bytee$B$G:n@.$G$-$k$H$$$$$+$b$7$l$^$;$s!#e(B

s = “abcde”
s.byte # "abcde"e$B$N%P%$%HNs%%V%8%’%/%He(B
s.byte[3] # => 100
s.byte[3] = 101 # e$BGK2uE
99?7e(B
s # => “abcee”

e$B$3$l!":#$d$m$&$H$7$F!"E$i$l$?$s$G$9$h$M!J$)e(B
“hoge”.bytes[1] = 0x62
NoMethodError: undefined method `[]=’ for
#Enumerable::Enumerator:0x81cb60c

e$B$=$&$$$($Pe(B Integer#chr
e$B$G%3!<%I%]%$%s%H"*J8;z$C$F$G$-$J$$$s$G$9$M!#54<V7Pe(B
e$BM3$G<BAu2DG=$@$H$O;W$C$?$N$G$9$,!#e(B

From: Yukihiro M. [email protected]
Subject: [ruby-dev:33192] Re: Ruby1.9
Stringe$B!!%P%$%HNs$X$N%$%s%G%C%/%9!!%"%/%;%9e(B
Date: Sun, 20 Jan 2008 02:03:06 +0900

e$B$k$S$-$A$G$9!#e(B

  1. e$B%P%$%HNs$H$7$F$N%"%/%;%9$r5v$9%a%=%C%I$rMQ0U$9$ke(B

e$B$*$=$i$/$Oe(B(Rubye$B$NBg%/%i%9<g5A$K=>$C$Fe(B)e$B8e<T$K$J$k$s$8$c$J$$$+e(B
e$B$H;W$$$^$9!#$8$c$“!”$J$<:#$J$$$N$+$H$$$&$H!"NI$$L>A0$,;W$$$De(B
e$B$+$J$+$C$?$+$i$G$9!#e(B

e$B$?$V$s!“FCDj$N0LCV$N%P%$%H$rFI$s$@$j=q$$$?$j$G$-$l$PNI$$$N$@e(B
e$B$H;W$&$N$G$9$,!”$J$K$+$=$l$>$l$K$U$5$o$7$$!“4J7ie(B(e$B$G$-$l$Pe(B)e$B$+e(B
e$B$DE,@Z$JL>A0$,$”$j$^$;$s$+$M!#e(B

e$B$=$N$^$^e(Bbytee$B$G$$$$5$$,$7$^$9!#e(B

s = “abcde”
s.byte(3) # => 100
s.byte(3, 101)
s # => “abcee”

e$B$"$k$$$Oe(BBytese$B%/%i%9$rMQ0U$7$Fe(BString#bytee$B$G:n@.$G$-$k$H$$$$$+$b$7$l$^$;$s!#e(B

s = “abcde”
s.byte # "abcde"e$B$N%P%$%HNs%%V%8%'%/%He(B
s.byte[3] # => 100
s.byte[3] = 101 # e$BGK2uE
99?7e(B
s # => “abcee”

e$B%$%s%G%C%/%9$K$Oe(BRangee$B$b;XDj$G$-$k$H$$$$$G$9!#e(B

e$B@.@%$G$9!#e(B

Tanaka A. wrote:

b’) ASCII only e$B$NJ8;zNs$O>o$Ke(B US-ASCII e$B$rJV$9e(B
e$B$H$$$&<j$b$"$k$N$+$Je(B

e$B$3$l$OJ8;zNs$Ke(B ASCII e$BJ8;z$7$+F~$C$F$$$J$$$3$H$rD4$Y$kI,MW$,e(B
e$B$"$k$N$G!"$A$g$&$I>e$G=R$Y$?3NG’$NOC$K$D$J$,$j$^$9!#e(B

e$B$^$!!“J8;zNs$ND9$5$KHfNc$7$?;~4V$r$+$1$F$$$$$N$G$”$l$P$$$$$se(B
e$B$G$9$,!#e(B

e$B$($’!"$=$l$OM}2r$7$F$^$9!#$7$+$7!"$=$N3NG’$K$+$+$k%3%9%H$O0J2<$NDL$j$G$9e(B
e$B$7!"LdBj$Ne(B coderange_scan
e$B$OJ8;zNs%j%F%i%k$N>l9g$O:n$C$?;~E@$G=*$o$C$F$$e(B
e$B$^$9$+$i!"LdBj$J$$$+$H;W$$$^$9!#$D$^$j!“e(Ba) b) b’)
e$B$H$b!”<BAu!&F0:n%3%9%He(B
e$B$O$[$H$s$IJQ$o$i$J$$$H;W$$$^$9!#e(B

static VALUE
rb_str_is_ascii_only_p(VALUE str)
{
int cr = rb_enc_str_coderange(str);

return cr == ENC_CODERANGE_7BIT ? Qtrue : Qfalse;

}
int
rb_enc_str_coderange(VALUE str)
{
int cr = ENC_CODERANGE(str);

if (cr == ENC_CODERANGE_UNKNOWN) {

rb_encoding *enc = STR_ENC_GET(str);
cr = coderange_scan(RSTRING_PTR(str), RSTRING_LEN(str), enc);
ENC_CODERANGE_SET(str, cr);
}
return cr;
}
#define ENC_CODERANGE(obj) (RBASIC(obj)->flags & ENC_CODERANGE_MASK)

if e$BJ80l$D$N0c$$$G$9$M!#e(B

static int
single_byte_optimizable(VALUE str)
{
rb_encoding *enc = STR_ENC_GET(str);

if (rb_enc_mbminlen(enc) == 1 && rb_enc_mbmaxlen(enc) == 1)
    return 1;

/* Conservative.  It may be ENC_CODERANGE_UNKNOWN. */
if (ENC_CODERANGE(str) == ENC_CODERANGE_7BIT)
    return 1;

/* Conservative.  Possibly single byte.
 * "\xa1" in Shift_JIS for example. */
return 0;

}

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Yukihiro M. [email protected]
Subject: [ruby-dev:33193] Re: Binary String
Date: Sun, 20 Jan 2008 02:28:17 +0900
Message-ID: [email protected]

|Ruby 1.8 e$B$+$i$Ne(B Marshal e$B7PM3e(B String e$B$N$3$H$^$G9M$($k$H!$e(B
|UNDEFINED-8BIT (dummy encoding e$B$r$3$l$K3d$j?6$k$N$b2D!)e(B) e$B$He(B
|Encoding.default_undefined e$B$H$r?7@_$7$?>e$G!$e(B
|Ruby 1.9 e$B$G$Oe(B Marshal e$B$N%U%)!<%^%C%H%P!<%8%g%s$re(B
|e$B>e$2$F$7$^$&$H$$$&$N$,0lHV$9$C$-$j$7$=$&$J5$$,$7$^$9!%e(B

e$B!V0lHV$9$C$-$j!W$H$$$&4p=`$,$h$/$o$+$i$J$$$N$G$9$,!";d$N<g4Qe(B
e$B$G$O$o$+$i$J$$$b$N$OA4It!Ve(BASCII-8BITe$B!W$H$$$&$N$,0lHV$9$C$-$je(B
e$B$7$F$$$^$9!#e(B

e$B$o$+$i$J$$$b$N$H$o$+$ke(B or e$B$o$+$k$H$7$F$$$$$b$N$H$NN>J}$Ke(B
ASCII-8BIT e$B$,IU$/$3$H$,$"$k$h$&$K8+<u$1$i$l$k$N$G!%!%!%e(B

e$B!V2?$G$3$l$,e(B ASCII-8BIT e$B$K$J$C$A$c$&$N!*!W$H$$$&%1!<%9$,e(B
e$B0l@ZL5$/$J$k$N$G$"$l$P!$e(BASCII-8BIT e$B$G$b$$$$$s$G$9$,!%e(B

e$B$,!“$=$l$G$O:$$k%1!<%9$b!”$b$7$+$7$?$i$“$k$G$7$g$&$+$i!”$=$Ne(B
e$B$h$&$J>l9g$K$O!"e(Bloade$B$N0z?t$H$7$F!"e(B(1.8e$B$+$iMh$?$h$&$Je(B)e$B%(%s%3!<e(B
e$B%G%#%s%0;XDj$,$J$$J8;zNs$KIUM?$9$k%(%s%3!<%G%#%s%0$N;XDj$r5ve(B
e$B$9$H$$$&$3$H$O9M$($F$b$h$$$H;W$C$F$$$^$9!#e(B

e$BJ8;zNs$Ne(B encoding e$B$K4X$9$k>pJs$r2?$i$+$NCM$Ge(B
e$BJ8;zNs$HJL$KJ];}$7$F$$$k>l9g$OLLE]$J$N$G$O$J$$$G$7$g$&$+!)e(B
load e$B$G$O;XDj$G$-$J$$$N$G!$FI$_9~$s$@8e$Ge(B
force_encoding e$B$;$M$P$J$j$^$;$s$h$M!%e(B
1.8 e$B$N%1!<%9$He(B 1.9 e$B$N%1!<%9$H$GJ,$1$M$P$J$j$^$;$s$7!%e(B

e$B!%!%!%$J$I$H;W$C$F$^$7$?$,!$!Ve(BObject
e$B0l$D$@$1$N$3$H!W$H9M$($l$Pe(B
e$B$=$l$bBg$7$?$3$H$G$O$J$$$G$9$M!%e(B(^_^;
e$B$?$@!$$A$g$C$H5$$K$J$k$N$,<!$NE@$G$9!%e(B

Marshal(1.9)e$B$G$O%(%s%3!<%G%#%s%0$Oe(B"encoding"e$B$H$$$&%$%s%9%?%se(B
e$B%9JQ?t$H$7$FJ]B8$5$l$k$N$G!"e(B1.8e$B$G$bLdBj$J$/FI$a$^$9!#$N$G!“e(B
e$B$3$NE@$+$i$O%U%)!<%^%C%H%P!<%8%g%s$r>e$2$J$1$l$P$J$i$J$$I,A3e(B
e$B@-$O$”$j$^$;$s!#e(B

e$B$3$l$Oe(B “@encoding” e$B$G$9$h$M!)e(B
e$B$=$NJ}?K$O3NDj$7$F$7$^$C$?$N$G$7$g$&$+!)e(B
e$B$@$H$7$?$i!$$A$g$C$H:$$k$N$G$O$J$$$+$H;W$$$^$9!%e(B
e$B<B:]$K!$e(BRuby/Tk 1.8 e$B$G$Ne(B Tk::BinaryString e$BB>e(B e$B$Oe(B
@encoding” e$B$H$$$&%$%s%9%?%s%9JQ?t$K>pJs$rJ];}$7$F$^$9$N$G!%e(B

Ruby/Tk e$B$N7o$O$H$b$+$/!$>!<j$K%$%s%9%?%s%9JQ?t$K$7$FIUM?$9$k$N$Oe(B
e$B%H%i%V%k$N85$K$J$k$h$&$J5$$,$7$^$9!%e(B
e$B$3$&$$$&$3$H$,$"$k$N$G!V%U%)!<%^%C%H%P!<%8%g%s$r>e$2$?J}$,!W$He(B
e$B8@$C$F$$$^$7$?!%e(B

e$B$J$s$@$+$($i$/J#;($G$9$,!“e(Bdefault_undefinede$B$r%W%m%0%i%`Cf$+$ie(B
e$BJQ99$G$-$k$J$i$=$l$O0l<o$NBg0hJQ?t$J$N$GLLE]$J!V>uBV!W$rF3F~e(B
e$B$9$k$3$H$K$J$j$^$9!#%9%l%C%I%;!<%U$8$c$J$/$J$k$7!#$=$l$O$”$^e(B

e$B<BAu$NLdBj$O$h$/J,$+$C$F$$$J$$$N$G$9$,!%$=$&$J$s$G$9$+!)e(B

e$B$j$*4+$a$G$O$“$j$^$;$s!#5U$KJQ99$G$-$J$$$J$i!”:#EY$O$$$m$$$me(B
e$B$J$H$3$m$+$i$NF~NO$5$l$?%(%s%3!<%G%#%s%0$,;XDj$5$l$F$$$J$$J8e(B
e$B;zNs$r%W%m%0%i%`A4BN$G0l3g$K07$&I,MW$,$“$j!”$=$l$O$=$l$G=@Fpe(B
e$B@-$K7g$1$k$h$&$K;W$$$^$9!#e(B

e$B!V$$$m$$$m$J$H$3$m$+$i$NF~NO!W$K$D$$$F$Oe(B default_external e$B$Ge(B
e$B>/$J$/$H$bL@<($5$l$k$b$N$H9M$($F$$$^$7$?$,!%e(B

e$B$K$D$$$F$O!“e(B(e$B$$$/$D$+$NNc30$r=|$$$Fe(B)e$BL@3N$K;XDj$5$l$F$$$J$$$he(B
e$B$&$K;W$$$^$9!#$”!“$b$A$m$s!V%P%$%J%j$K!Ve(BASCIIe$B!W$H$$$&L>A0$,$De(B
e$B$$$F$$$k$N$,5$$KF~$i$J$$!W$H$$$&M}M3$b$”$k$N$G$9$,!"$=$3$O$=e(B
e$B$l!"Nr;KE*;v>p$J$N$GL$r$D$V$C$F$$$?$@$/$H$7$F!#e(B

e$B$O$$!%$H$j$"$($:$O!V:$$k!W$H$$$&6qBNNc$,=P$k$^$GJ]N1$7$^$9!%e(B

In article [email protected],
“NARUSE, Yui” [email protected] writes:

e$B$($‘!“$=$l$OM}2r$7$F$^$9!#$7$+$7!”$=$N3NG’$K$+$+$k%3%9%H$O0J2<$NDL$j$G$9e(B
e$B$7!"LdBj$Ne(B coderange_scan e$B$OJ8;zNs%j%F%i%k$N>l9g$O:n$C$?;~E@$G=*$o$C$F$$e(B
e$B$^$9$+$i!"LdBj$J$$$+$H;W$$$^$9!#$D$^$j!“e(Ba) b) b’) e$B$H$b!”<BAu!&F0:n%3%9%He(B
e$B$O$[$H$s$IJQ$o$i$J$$$H;W$$$^$9!#e(B

e$B$=$l$G:Q$a$P$H$F$b9,$;$J$s$G$9$,!“;DG0$J$3$H$KJ8;zNs$OJQ99$5e(B
e$B$l$F$$$/$3$H$,$”$j$^$9$N$G!#e(B

e$BJ8;zNs$,JQ99$5$l$k$H!“FC$KBP=h$7$F$$$J$$8B$je(B coderange e$B$Oe(B
unknown e$B$K$J$k$?$a!”%k!<%W$NCf$GJ8;zNs$rJQ99$7$F$$$k$H!“Kh2se(B
coderange_scan e$B$,F0$/>l9g$,$”$j$^$9!#e(B

e$B$3$l$,J8;zNs$,$I$s$I$s?-$S$F$$$/$H$-$K5/$3$k$H$H$/$K6’0-$G!"e(B
e$BJ8;zNs$ND9$5$KBP$7$F@~7A$G$O:Q$^$J$$;~4V$,$+$+$j$^$9!#e(B

1.9.0-0 e$B$NA0$K$Oe(B Array#join e$B$G5/$-$Fe(B install-doc
e$B$,;d$N<j85e(B
e$B$Ge(B 40e$BJ,$+$+$k$H$$$&$3$H$,$“$j$^$7$?$7!”$A$g$C$HA0$K$Oe(B
String#gsub e$B$NFbIt$G7k2L$r?-$P$7$F$$$/$H$-$K5/$-$F<+:n$N%i%$e(B
e$B%V%i%je(B (htree) e$B$,5vMFITG=$J<B9TB.EY$K$J$j$^$7$?!#e(B

e$B$=$&$$$&$3$H$b$"$j$^$9$N$G!“J8;zNsD9$KHfNc$7$?;~4V$r$+$1$6$ke(B
e$B$rF@$J$$;EMM$K$9$k$N$O!”$I$&$7$F$bI,MW$@$H$$$&$N$G$J$$8B$j$de(B
e$B$a$F$*$$$?$[$&$,NI$$$H;W$C$F$$$^$9!#e(B

e$B$^$!!“?M4V$NB&LL$+$iI,MW$@$H$$$&$N$G$”$l$P!"e(BRuby e$B$NJ}?K$+$ie(B
e$B$7$F$I$&$7$F$bI,MW$@$H$$$&$3$H$K$J$k$N$+$b$7$l$^$;$s$,!#e(B

e$B$J$+$@$G$9!#e(B

At Sun, 20 Jan 2008 06:58:41 +0900,
Hidetoshi NAGAI wrote in [ruby-dev:33202]:

e$B$,!"$=$l$G$O:$$k%1!<%9$b!"$b$7$+$7$?$i$"$k$G$7$g$&$+$i!"$=$Ne(B
e$B$h$&$J>l9g$K$O!"e(Bloade$B$N0z?t$H$7$F!"e(B(1.8e$B$+$iMh$?$h$&$Je(B)e$B%(%s%3!<e(B
e$B%G%#%s%0;XDj$,$J$$J8;zNs$KIUM?$9$k%(%s%3!<%G%#%s%0$N;XDj$r5ve(B
e$B$9$H$$$&$3$H$O9M$($F$b$h$$$H;W$C$F$$$^$9!#e(B

e$B0z?t$8$c$J$/$Fe(Bdumpe$B$NF~NO%G!<%?$N%(%s%3!<%G%#%s%0$K$9$k$H$+!#e(B

Marshal(1.9)e$B$G$O%(%s%3!<%G%#%s%0$Oe(B"encoding"e$B$H$$$&%$%s%9%?%se(B
e$B%9JQ?t$H$7$FJ]B8$5$l$k$N$G!"e(B1.8e$B$G$bLdBj$J$/FI$a$^$9!#$N$G!“e(B
e$B$3$NE@$+$i$O%U%)!<%^%C%H%P!<%8%g%s$r>e$2$J$1$l$P$J$i$J$$I,A3e(B
e$B@-$O$”$j$^$;$s!#e(B

e$B$3$l$Oe(B “@encoding” e$B$G$9$h$M!)e(B
e$B$=$NJ}?K$O3NDj$7$F$7$^$C$?$N$G$7$g$&$+!)e(B
e$B$@$H$7$?$i!$$A$g$C$H:$$k$N$G$O$J$$$+$H;W$$$^$9!%e(B
e$B<B:]$K!$e(BRuby/Tk 1.8 e$B$G$Ne(B Tk::BinaryString e$BB>e(B e$B$Oe(B
@encoding” e$B$H$$$&%$%s%9%?%s%9JQ?t$K>pJs$rJ];}$7$F$^$9$N$G!%e(B

"@"e$B$J$7$Ne(B"encoding"e$B$H$$$&!"e(BRubye$B%l%Y%k$K$O8+$($J$$%$%s%9%?%s%9JQe(B
e$B?t$G$9!#e(B

e$B$_$J$5$^JVEz$"$j$,$H$&$4$6$$$^$9!#e(B

e$B$=$&$G$9!#e(BBytes#[]e$B$de(BBytes#[]=e$B$Oe(BArray#[]e$B$N$h$&$Ke(BRangee$B$J$I$b;XDj$G$-$k$h$&$K$7$F!"e(B
e$B1&JU$K$OJ8;zNs!“e(BBytese$B!”@0?t$NG[NsEy$,;XDj$G$-$l$P$$$$$+$b!#e(B

e$B$&!<$s!"$3$l$O;d$K$OI,MW==J,$H$$$&$h$&$J!"$$$$46$8$,$7$^$9!#e(B

s.byte(3, 101) e$B$N7A<0$O!"BeF~46$,$J$$$H$$$&0J30$K!"e(B
e$BBeF~$N1&JU$,Hf3SE*D9$$>l9g$K!"BhFs0z?t$,D9$/$J$k$+!"e(B
e$BFs9T$KJ,$1$F!"0lEY%F%s%]%i%jJQ?t$G<u$1$FBeF~$9$k$3$H$K$J$k$N$G!“e(B
e$B%”%k%4%j%:%`$r$9$C$-$j=q$1$J$$$3$H$,B?$$$h$&$K;W$$$^$9!#e(B

e$B$+$H$$$C$Fe(B,
e$BJ8;zNs$H$7$F;H$$$?$$$+!"e(BBytee$BNs$H$7$F$D$+$$$?$$$+$K$h$C$F!"e(B
e$BJL%*%V%8%’%/%H$H$7$Fe(BBytes.newe$B!!$7$?$j!"e(Bto_byte_array,
to_str, force_encoding
e$B$J$Ie(Bconversion
e$B$r7+$jJV$7$?$j$9$k$N$b7Z2w$G$J$/!"5$$,=E$/46$8$i$l$^$9!#e(B

e$B$3$N$d$jJ}$@$H%G!<%?85$Ne(BStringe$B%/%i%9$+$iA4$/N%$l$:$Ke(B[], []=
e$B$r;H$C$F?tCM$NFI$_9~$e(B
e$B=q$-9~$
$,$G$-$k$N$G!"AG@2$i$7$$$H;W$$$^$9!#e(B

e$B<B8=$5$l$l$P$H$F$b$"$j$,$?$$$G$9!#e(B
e$B$I$&$>$h$m$7$/$*4j$$CW$7$^$9!#e(B

Gimitee$B$G$9!#e(B

e$B$J$s$H$J$/!"%P%$%J%j$HL@<($7$?$$;~$K$@$1L@<($7$F$$$$F!"$h$/$o$+$i$J$$>le(B
e$B9g$O$h$/$o$+$i$J$$$^$^$h$7$J$K$d$C$F$$$C$F!"$J$s$H$+$J$k$@$m$&!"$H$$$&$he(B
e$B$&$JJ70O5$$r46$8$k$N$G$9$,!"e(BRuby 1.9 e$B$K$
$$$F$Oe(B binary encoding e$B$NJ8;zNse(B
e$B$H!“e(BASCII-8BIT e$B$NJ8;zNs$O7k9g!&Hf3SIT2DG=$@$+$iJLJ*!”$D$^$j!"%f!<%6!<$,e(B
Tke$BEy$KEO$9%P%$%J%jJ8;zNsA4$F$re(B binary e$B$K$7$J$1$l$P$J$i$J$$$3$H$ON;2r$5$le(B
e$B$F$^$9!)$5$9$,$K$=$l$C$F$"$^$j$KLLE]$J$N$G$O$J$$$+$J$!$H;W$C$F$$$k$N$G$9$,!#e(B

e$B$9$$$^$;$s!"e(BTke$B$r;H$C$?$3$H$,$J$$$N$GJ,$+$i$J$$$N$G$9$,!“J8;zNs$G$O$J$/%P%$%J%j%G!<%?$rEO$9>lLL$H$$$&$N$O$=$s$J$KB?$$$N$G$7$g$&$+!)2hA|%G!<%?$rEO$9$H$-$0$i$$$7$+;W$$$D$+$J$+$C$?$N$G$9$,!D!#%P%$%J%j$@$HL@<($7K:$l$?>l9g$ONc30$,Ht$V$N$G!”$=$NNc30$r8+$Fe(Bforce_encodinge$B$rB-$;$P$$$$$@$1$G$9$7!#e(B

e$B$?$@!"@.@%$5$s$N!V%P%$%J%j%G!<%?$H%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$r6hJL$7$J$/$F$b!"%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$re(BTke$B$KEO$7$F$7$^$C$?$H$-$KJ8;z2=$1$k$@$1$G$7$g!)!W$H$$$&$N$b$b$C$H$b$J$N$G!"8D?ME*$K$O2<5-e(BAe$B0F$He(BBe$B0F$J$i$I$C$A$G$b$$$$$H;W$C$F$$$^$9!#e(B

[Ae$B0Fe(B]e$B!J@.@%$5$s0F!Ke(B

e$B!&%P%$%J%j%G!<%?$H%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$r6hJL$;$:!"N>J}e(BASCII-8BITe$B$H$9$k!#e(B
e$B!&e(BTke$B$Oe(BASCII-8BITe$B0J30$Ne(BStringe$B$r<u$1<h$C$?$ie(BUTF-8e$B$K<+F0JQ49$9$k!#e(BASCII-8BITe$B$Ne(BStringe$B$r<u$1<h$C$?$H$-$OJQ49$7$J$$!#e(B

e$BLdBjE@e(B:
e$B!&%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$re(BTke$B$KEO$9$H!"$=$l$,$?$^$?$^e(BUTF-8e$B$G$J$$8B$jJ8;z2=$1$k!#e(B
e$B!&$=$N$?$a!"!Ve(B1.8e$B$G$?$^$?$^F0$$$F$$$?!W%3!<%I$G$OJ8;z2=$1$,5/$3$k!#e(B

[Be$B0Fe(B]e$B!Je(BGimitee$B0F!Ke(B

e$B!&%P%$%J%j%G!<%?$H%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$KJL!9$N%(%s%3!<%G%#%s%0!JNc$($Pe(BBINARYe$B$He(BASCII-8BITe$B!K$r3d$jEv$F$k!#e(B
e$B!&e(BTke$B$Oe(BBINARYe$B$Ne(BStringe$B$r<u$1<h$C$?$iJQ49$7$J$$!#e(BASCII-8BITe$B$Ne(BStringe$B$r<u$1<h$C$?$iNc30$rEj$2$k!#$=$l0J30$Ne(BStringe$B$r<u$1<h$C$?$ie(BUTF-8e$B$K<+F0JQ49$9$k!#e(B

e$BLdBjE@e(B:
e$B!&%P%$%J%j%G!<%?$re(BTke$B$KEO$9$H$-$O>o$Ke(Bforce_encodinge$B$9$kI,MW$,$"$k!#e(B
e$B!&!Ve(B1.8e$B$G$?$^$?$^F0$$$F$$$?!W%3!<%I$,F0$+$J$/$J$k!Je(BASCII-8BITe$B$Ne(BStringe$B$,e(BTke$B$KEO$j!"Nc30$,5/$-$k!K!#e(B

[Ce$B0Fe(B]e$B!J1J0f$5$s0F!Ke(B

e$B!&%P%$%J%j%G!<%?$H%(%s%3!<%G%#%s%0ITL@$JJ8;zNs$KJL!9$N%(%s%3!<%G%#%s%0!JNc$($Pe(BBINARYe$B$He(BASCII-8BITe$B!K$r3d$jEv$F$k!#e(B
e$B!&e(BTke$B$Oe(BBINARYe$B$Ne(BStringe$B$r<u$1<h$C$?$iJQ49$7$J$$!#e(BASCII-8BITe$B$Ne(BStringe$B$r<u$1<h$C$?$ie(Blocale_charmape$B$G%(%s%3!<%I$5$l$F$k$H$_$J$7!"e(BUTF-8e$B$KJQ49$9$k!#$=$l0J30$Ne(BStringe$B$r<u$1<h$C$?$ie(BUTF-8e$B$K<+F0JQ49$9$k!#e(B

e$BLdBjE@e(B:
e$B!&%P%$%J%j%G!<%?$re(BTke$B$KEO$9$H$-$O>o$Ke(Bforce_encodinge$B$9$kI,MW$,$"$k!#e(B
e$B!&%(%s%3!<%G%#%s%0ITL@!Je(BASCII-8BITe$B!K$JJ8;zNs$re(BTke$B$KEO$9$H!"$=$l$,$?$^$?$^e(Blocale_charmape$B$G%(%s%3!<%I$5$l$F$$$J$$8B$jJ8;z2=$1$k!#!J5U$K!"!Ve(B1.8e$B$G$?$^$?$^F0$$$F$$$?!W%3!<%I$bLdBj$J$/F0$-B3$1$k!Ke(B

At 03:48 08/01/20, [email protected] wrote:

From: Yukihiro M. [email protected]

e$B$"$k$$$Oe(BBytese$B%/%i%9$rMQ0U$7$Fe(BString#bytee$B$G:n@.$G$-$k$H$$$$$+$b$7$l$^$;$s!#e(B

Bytes e$B%/%i%9$O$=$b$=$b$[$H$s$I$b$&4{$K$“$k!#e(BEncoding e$B$,e(B
ASCII-8BIT
e$B$H$+e(B BINARY
e$B$H$+$NJ8;zNs$G$9!#$=$3$+$i$NLdBj$O<g$KFs$D$”$k$+$H;W$$$^$9!#e(B
e$B0l$DL$O@5?t$NBeF~!#0lHLE*$Je(B Encoding
e$BA4$F$r$d$k$H$A$g$C$H$d$d$3$7$/e(B
e$B$J$k2DG=@-$,$"$k$,!"e(BBINARY
e$B$@$1$G$d$k$N$O4JC1$N$O$:!#$J$<$+$H!“8=:_e(B
e$B@0?t$rBeF~$7$h$&$H$9$k$H%(%i!<$G!”$=$N>l9g$r<BAu$9$l$P$h$$$@$m$&!#e(B

e$B$b$&0l$D$OIaDL$NJ8;zNs$N>l9g$Ne(B BINARY e$B$H$7$F$N0l;~E*$J07$$!#e(B
e$BNc$($Pe(B (e$B>e5-$NLdBj$,2r7h$7$?$ie(B)
s.byte[3] = 101
e$B$Oe(B
temp = s.encoding
s.force_encoding(‘ASCII-8BIT’)
s[3] = 101
s.force_encoding(temp)
e$B$H=q$1$^$9!#$G$bD9$/$FLLE]$/$5$$$G$9$h$M!#$3$32?$H$+$G$-$l$Pe(B
e$B$3$NJU$j$O7k9=A0?J$G$-$k$H;W$$$^$9$,!"$3$A$i$GCN$C$F$$$k8B$j$G$Oe(B
e$B8=:_$NFbIt9=B$$G$O$=$s$J$K4JC1$G$O$J$5$=$&$G$9!#e(B

e$B$A$J$_$K!"e(Bbyte e$B$N$G$O$J$/e(B bytes
e$B$NJ}$,BEEv$@$H;W$$$^$9!#e(B

s = “abcde”
s.byte # "abcde"e$B$N%P%$%HNs%*%V%8%'%/%He(B
s.byte[3] # => 100

e$B$3$l$OB?J,e(B s.byte[3].ord
e$B$G2fK}$G$-$k$N$G$O$J$$$+$H<+J,$G$O;W$$$^$9$,!"e(B
e$B$$$+$,$G$7$g$&$+!#e(B

e$B59$7$/$*4j$$$7$^$9!#e(B Martin.

s.byte[3] = 101 # e$BGK2uE*99?7e(B
s # => “abcee”

e$B%$%s%G%C%/%9$K$Oe(BRangee$B$b;XDj$G$-$k$H$$$$$G$9!#e(B


rubikitch
Blog: http://rubikitch.com/に移転しました
Site: http://www.rubyist.net/~rubikitch/

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-# http://www.sw.it.aoyama.ac.jp mailto:[email protected]

At 04:55 08/01/20, NARUSE, Yui wrote:

e$B$=$&$$$($Pe(B Integer#chr e$B$G%3!<%I%]%$%s%H"*J8;z$C$F$G$-$J$$$s$G$9$M!#54<V7Pe(B
e$BM3$G<BAu2DG=$@$H$O;W$C$?$N$G$9$,!#e(B

Integer#chr e$B$@$1$G$O$@$a$G!“e(BInteger#chr(encoding)
e$B$K$J$k$+$H;W$$$^$9!#e(B
e$B$7$+$b7k2L$OJ8;z$G$O$J$/!”@53N$K8@$$$^$9$He(B1e$BJ8;z$NJ8;zNs$G$9$h$M!#e(B
e$B$3$NJU$Ge(B String[i] = integer
e$B$NJ}$,<BAu$G$-$l$PJXMx$G$9$h$M!#e(B
e$B$J$<$+$H$$$&$He(B string e$B$NJ}$K$O$b$&4{$Ke(B encoding
e$B$N>pJs$,$"$k$+$i$G$9!#e(B

e$B59$7$/$*4j$$$7$^$9!"e(B Martin.

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-# http://www.sw.it.aoyama.ac.jp mailto:[email protected]

On Jan 20, 2008, at 9:49 AM, Martin D. wrote:

At 04:55 08/01/20, NARUSE, Yui wrote:

e$B$=$&$$$($Pe(B Integer#chr e$B$G%3!<%I%]%$%s%H"*J8;z$C$F$Ge(B
e$B$-$J$$$s$G$9$M!#54<V7Pe(B
e$BM3$G<BAu2DG=$@$H$O;W$C$?$N$G$9$,!#e(B

Integer#chr e$B$@$1$G$O$@$a$G!"e(BInteger#chr(encoding) e$B$Ke(B
e$B$J$k$+$H;W$$$^$9!#e(B

e$B$b$&$G$-$^$9$h!#e(B
irb(main):003:0> 0xa4a2.chr(‘euc-jp’).encode(‘utf-8’)
=> "e$B$“e(B”
irb(main):007:0> 0x3042.chr(‘utf-8’)
=> "e$B$“e(B”

e$B#1#07n#2#6F|$+$i$_$?$$$G$9!'e(B
Fri Oct 26 17:38:13 2007 Nobuyoshi N. [email protected]

     * numeric.c (int_chr): take an optional encoding parameter.
       [ruby-core:12816]

e$B@.@%$G$9!#e(B

Tanaka A. wrote:

e$B$=$l$G:Q$a$P$H$F$b9,$;$J$s$G$9$,!";DG0$J$3$H$KJ8;zNs$OJQ99$5e(B
e$B$l$F$$$/$3$H$,$"$j$^$9$N$G!#e(B

e$B$3$l$bJQ99$r$-$A$s$HDI$C$F9T$1$P!"5f6KE*$K$Oe(Bgsube$BEy$Ge(B8bite$B$JJ8;z$,H4$1$F!"e(B
8bit->7bite$B$K$J$k%1!<%90J30$ODI@W2DG=$@$H;W$&$N$G$9$,!"e(B

e$BJ8;zNs$,JQ99$5$l$k$H!“FC$KBP=h$7$F$$$J$$8B$je(B coderange e$B$Oe(B
unknown e$B$K$J$k$?$a!”%k!<%W$NCf$GJ8;zNs$rJQ99$7$F$$$k$H!“Kh2se(B
coderange_scan e$B$,F0$/>l9g$,$”$j$^$9!#e(B

e$B$3$N!VFC$KBP=h!W$r$I$NDxEYE0Dl2DG=$+!"$H$$$&$3$H$K$J$k$N$G$7$g$&$M$’!#e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

e$B@h$N%a!<%k$K>/$7JdB-$7$^$9!%e(B

From: Hidetoshi NAGAI [email protected]
Subject: [ruby-dev:33202] Re: Binary String
Date: Sun, 20 Jan 2008 06:58:41 +0900
Message-ID: [email protected]

e$B$o$+$i$J$$$b$N$H$o$+$ke(B or e$B$o$+$k$H$7$F$$$$$b$N$H$NN>J}$Ke(B
ASCII-8BIT e$B$,IU$/$3$H$,$"$k$h$&$K8+<u$1$i$l$k$N$G!%!%!%e(B

e$B!V2?$G$3$l$,e(B ASCII-8BIT e$B$K$J$C$A$c$&$N!*!W$H$$$&%1!<%9$,e(B
e$B0l@ZL5$/$J$k$N$G$"$l$P!$e(BASCII-8BIT e$B$G$b$$$$$s$G$9$,!%e(B

e$B4JC1$K8@$C$F$7$^$&$H!$e(B
e$B!V$o$+$i$J$$$b$N$K$D$$$F$O!X$o$+$i$J$$!Y$C$F@5D>$K8@$C$A$c$*$&$h!We(B
e$B$C$FOC$G$9!%e(B
e$B$=$&$9$l$P!V$"$l$K$9$Y$-!W$@$H$+!V>!<j$KM?$($k$Y$-$G$O$J$$!W$@$H$+$Ge(B
e$B%4%?%4%?$7$J$$$G$7$g$&$7!$L$Dj5A$r07$$$?$$?M$b$=$&$G$J$$?M$be(B
e$B$I$A$i$bG<F@$G$-$k$h$&$K$G$-$k$+$b$H;W$C$F$^$9!%e(B

e$B$J$s$@$+$($i$/J#;($G$9$,!“e(Bdefault_undefinede$B$r%W%m%0%i%`Cf$+$ie(B
e$BJQ99$G$-$k$J$i$=$l$O0l<o$NBg0hJQ?t$J$N$GLLE]$J!V>uBV!W$rF3F~e(B
e$B$9$k$3$H$K$J$j$^$9!#%9%l%C%I%;!<%U$8$c$J$/$J$k$7!#$=$l$O$”$^e(B

e$B<BAu$NLdBj$O$h$/J,$+$C$F$$$J$$$N$G$9$,!%$=$&$J$s$G$9$+!)e(B

e$B$3$s$J46$8$N$3$H$r9M$($F$?$s$G$9$,!%!%!%e(B

$ irb19
irb(main):001:0> s = ‘e$B46$8e(B’
=> “e$B46$8e(B”
irb(main):002:0> s.encoding
=> #Encoding:EUC-JP
irb(main):003:0> s2 = s.dup
=> “e$B46$8e(B”
irb(main):004:0> s2.force_encoding(‘UNDEFINED-8BIT’)
=> “\xB4\xB6\xA4\xB8”
irb(main):005:0> Encoding.default_undefined
=> #Encoding:ASCII-8BIT
irb(main):006:0> Encoding.default_undefined = ‘EUC-JP’
=> “EUC-JP”
irb(main):007:0> Encoding.default_undefined
=> #Encoding:EUC-JP
irb(main):008:0> s2
=> “e$B46$8e(B”
irb(main):009:0> s2.encoding
=> #Encoding:UNDEFINED-8BIT
irb(main):010:0> Encoding.default_undefined = ‘ASCII-8BIT’
=> “ASCII-8BIT”
irb(main):011:0> s2
=> “\xB4\xB6\xA4\xB8”
irb(main):012:0> s2.encoding
=> #Encoding:UNDEFINED-8BIT
irb(main):013:0>

e$B$3$3$G$Oe(B UNDEFINED-8BIT e$B$X$Ne(B force_encoding
e$B$r5v$7$F$^$9$,!$e(B
e$B$3$l$O6X;_$7$F$b$$$$$N$+$J$H;W$C$F$^$9!%e(B

e$B>e5-F0:n$N$?$a$N%Q%C%A$O0J2<$NDL$j$G$9!%e(B
e$BL5Cc$J$3$H$r$d$C$F$^$9$+$M!)e(B(^_^;

e$B$D$$$G$Ke(B ENC_ALIAS(“BINARY”, “ASCII-8BIT”) e$B$G$O$J$/e(B
ENC_REPLICATE(“BINARY”, “ASCII-8BIT”) e$B$J$i==J,K~B-$J$s$G$9$,!%!%!%e(B

Index: encoding.c

— encoding.c (revision 15145)
+++ encoding.c (working copy)
@@ -313,6 +313,43 @@
return enc_replicate(idx, name, rb_enc_from_index(origidx));
}

+static char* UNDEFINED_ENC = “UNDEFINED-8BIT”;
+
+static VALUE
+get_default_undefined(VALUE self)
+{

  • int idx;
  • idx = rb_enc_find_index(UNDEFINED_ENC);
  • if (idx < 0) {
  • rb_raise(rb_eArgError, “can’t find encoding name - %s”,
    UNDEFINED_ENC);
  • }
  • return
    enc_base_encoding(rb_enc_from_encoding(enc_table.list[idx].enc));
    +}

+static VALUE
+set_default_undefined(VALUE klass, VALUE enc)
+{

  • int idx;
  • rb_encoding *encoding;
  • if (SYMBOL_P(enc)) enc = rb_id2str(SYM2ID(enc));
  • idx = rb_enc_find_index(StringValueCStr(enc));
  • if (idx < 0) {
  • rb_raise(rb_eArgError, “unknown encoding name - %s”,
    RSTRING_PTR(enc));
  • }
  • encoding = rb_enc_from_index(idx);
  • idx = rb_enc_find_index(UNDEFINED_ENC);
  • if (idx < 0) {
  • rb_raise(rb_eArgError, “can’t find encoding name - %s”,
    UNDEFINED_ENC);
  • }
  • enc_register_at(idx, UNDEFINED_ENC, encoding);
  • set_base_encoding(idx, encoding);
  • return rb_enc_from_encoding(encoding);
    +}

int
rb_define_dummy_encoding(const char *name)
{
@@ -1209,6 +1246,9 @@
rb_define_method(rb_cEncoding, “_dump”, enc_dump, -1);
rb_define_singleton_method(rb_cEncoding, “_load”, enc_load, 1);

  • rb_define_singleton_method(rb_cEncoding, “default_undefined”,
    get_default_undefined, 0);
  • rb_define_singleton_method(rb_cEncoding, “default_undefined=”,
    set_default_undefined, 1);
  • rb_define_singleton_method(rb_cEncoding, “default_external”,
    get_default_external, 0);
    rb_define_singleton_method(rb_cEncoding, “locale_charmap”,
    rb_locale_charmap, 0);

Index: enc/ascii.c

— enc/ascii.c (revision 15145)
+++ enc/ascii.c (working copy)
@@ -48,6 +48,7 @@
onigenc_always_true_is_allowed_reverse_match
};
ENC_ALIAS(“BINARY”, “ASCII-8BIT”);
+ENC_REPLICATE(“UNDEFINED-8BIT”, “ASCII-8BIT”);
ENC_REPLICATE(“IBM437”, “ASCII-8BIT”);
ENC_ALIAS(“CP437”, “IBM437”);
ENC_REPLICATE(“IBM737”, “ASCII-8BIT”);

e$B@.@%$G$9!#e(B

Hidetoshi NAGAI wrote:

e$B4JC1$K8@$C$F$7$^$&$H!$e(B
e$B!V$o$+$i$J$$$b$N$K$D$$$F$O!X$o$+$i$J$$!Y$C$F@5D>$K8@$C$A$c$*$&$h!We(B
e$B$C$FOC$G$9!%e(B
e$B$=$&$9$l$P!V$"$l$K$9$Y$-!W$@$H$+!V>!<j$KM?$($k$Y$-$G$O$J$$!W$@$H$+$Ge(B
e$B%4%?%4%?$7$J$$$G$7$g$&$7!$L$Dj5A$r07$$$?$$?M$b$=$&$G$J$$?M$be(B
e$B$I$A$i$bG<F@$G$-$k$h$&$K$G$-$k$+$b$H;W$C$F$^$9!%e(B

e$B7k6I46>p$H$7$F$3$3$K5"Ce$7$F$$$k$N$@$m$&$J$!$H$O;W$C$F$$$?$N$G$9$,!"e(B

irb(main):002:0> s.encoding
=> #Encoding:EUC-JP
irb(main):013:0>

e$B$3$3$G$Oe(B UNDEFINED-8BIT e$B$X$Ne(B force_encoding e$B$r5v$7$F$^$9$,!$e(B
e$B$3$l$O6X;_$7$F$b$$$$$N$+$J$H;W$C$F$^$9!%e(B

e$B0J2<$NF0:n$ON;2r$J$5$C$F$$$^$9$+!)e(B

  1. s2.encoding e$B$O$:$C$He(BUNDEFINED-8BIT
    e$B$rJV$9!"$N$Oe$NOC$H$7$F!"e(B
  2. s1 (EUC-JP) + s2 e$B$Oe(B encoding e$B$,0c$&$h%(%i!<e(B
  3. ASCII-8BIT e$B$JJ8;zNs$H$N7k9g!&Hf3S$b%(%i!<e(B
    undefined e$B$H$$$&<q;]$+$i$7$Fe(B dummy e$B%U%i%0$rIU$1$F$7$^$&$He(B
  4. US-ASCII e$B$JJ8;zNs$H$N7k9g!&Hf3S$b%(%i!<e(B
    undefined
    e$B$C$F$3$H$OL@$i$+$K$J$j$^$9$,!"$3$s$J$b$NK\Ev$KM_$7$$$s$G$9$+!)e(B
    secure ruby e$B$$?$$$J$b$N$,$"$C$?$i$=$3$G$OM$7$=$&$G$9$,!#e(B