Requests to transcode

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

transcodee$B$K4X$7$F!“e([email protected]$[$IMWK>$,$”$k$N$G$9$,!"$=$l$>$l<B8=2De(B
[email protected](B(e$B$H!"<B8=$9$k$J$i;~4|e(B)e$B$O$I$s$J$b$s$G$7$g$&$+e(B?

(1) Windows-31Je$B%5%]!<%He(B
e$B3N$+0JA0$Ke([email protected]@8$,BP1~M=Dj$H$$C$7$c$C$F$$i$l$?$H;We(B
e$B$$$^$9!#e(B
e$BJL$K5^$+$9$o$1$8$c$J$$$G$9$,!"0l1~3NG’$H$$$&$3$H$G!#e(B

(2) e$BJQ49$G$-$J$$J8;z$N07$$e(B
e$B8=>u$OJQ49$G$-$J$$J8;z$,$"$k$HNc30$,H/@8$7$^$9$,!"$=$&$$e(B
e$B$&J8;z$r!Ve(B?e$B!W$d!V".!W$J$I$KCV$-49$($F=hM}$rB39T$7$?$$>lLLe(B
e$B$b$=$l$J$j$K$"$k$H;W$$$^$9!#e(B
[ruby-core:15036]e$B$"$?$j$+$i$NOC$,$=$&[email protected]$H;W$$$^$9$,!"$3$le(B
e$B$O$I$&$J$j$=$&$G$7$g$&$+e(B?

(3) C API
String#encodee$B$KAjEv$9$ke(BC APIe$B$,M_$7$$$G$9!#e(B
e$B$^$"!"$=$N$^$^$J$ie(Bfuncalle$B$G$b$$$$$s$G$9$1$I!"$G$-$l$P$b$&e(B
e$B$A$g$C$He(BCe$B4s$j$NE[$,M_$7$$$G$9$M!#e(B

e$B$*4j$$$P$C$+$j$K$J$C$A$c$C$F$^$9$,!"FbMF$K$h$C$F$O<BAuLL$G$*e(B
e$B<jEA$$$G$-$k$+$b$7$l$^$;$se(B(e$B$G$-$J$$$+$b$7$l$^$;$se(B)e$B!#e(B

e$B$=$l$G$O!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:33251] Re: requests to transcode”
on Jan.21,2008 19:07:40, [email protected] wrote:
| >(1) Windows-31Je$B%5%]!<%He(B
| > e$B3N$+0JA0$Ke([email protected]@8$,BP1~M=Dj$H$$C$7$c$C$F$$i$l$?$H;We(B
| > e$B$$$^$9!#e(B
| > e$BJL$K5^$+$9$o$1$8$c$J$$$G$9$,!“0l1~3NG’$H$$$&$3$H$G!#e(B
|
| e$B$3$A$i$G$O$b$&4{$K0l1~$d$C$?$s$G$9$,!”$=$N;~$K:#$Ne(B Shift_JIS
| e$B$He(B EUC-JP e$B$N$H$3$m$K$$$/$D$+$N5?Ld$,$G$F$-$F!"$3$l$r$-$A$s$He(B
| [email protected]$$=P$7$FAjCL$7$h$&$H;W$C$F$$$^$9!#e(B

[email protected]@%$5$s$,$$$m$$$m=u$1$F$/$l$k$H;W$$$^$9!#e(B

e$BB>NOK\4j$G$9$_$^$;$se(B

| >(2) e$BJQ49$G$-$J$$J8;z$N07$$e(B
| > e$B8=>u$OJQ49$G$-$J$$J8;z$,$"$k$HNc30$,H/@8$7$^$9$,!"$=$&$$e(B
| > e$B$&J8;z$r!Ve(B?e$B!W$d!V".!W$J$I$KCV$-49$($F=hM}$rB39T$7$?$$>lLLe(B
| > e$B$b$=$l$J$j$K$"$k$H;W$$$^$9!#e(B
| > [ruby-core:15036]e$B$"$?$j$+$i$NOC$,$=$&[email protected]$H;W$$$^$9$,!"$3$le(B
| > e$B$O$I$&$J$j$=$&$G$7$g$&$+e(B?
|
| e$B$=$&$G$9$M!#<BAu$O$o$j$H4JC1$G$9$,!“e(BAPI e$B$r7h$a$J$$$H9T$1$J$$$G$9!#e(B
| e$B:G=E$K%V%m%C%/$b$&$^$/;H$$$?$$$G$9$,!”$3$l$O$b$&>/[email protected][email protected]$H;W$$$^$9!#e(B
| e$B8=:9M$($F$$$k$N$ONc$($Pe(B File.fnmatch e$B$$?$$$J%U%i%0$r;H$&$3$H$G$9!#e(B
|
| e$BNc$($Pe(B
|
| s.encode(‘EUC-JP’, String::ENCODE_SUBSTITUTE_TARGET_DEFAULT)
| e$B$H$+e(B
| s.encode(‘Shift_JIS’, ‘UTF-8’, String::DROP_BROKEN_BYTES)
| e$B$H$+!#L^[email protected]$b$&>/$7C;$/$F$b$$$$$+$H;W$$$^$9e(B :-)e$B!#e(B

ruby-coree$B$K$"$C$?%V%m%C%/$r;H$&0F$O%9%^!<%[email protected]$H$O;W$$$^$9!#e(B
statefule$B$Je(Bencodinge$B$+$i$NJQ49$N<:GT;~$K$I$&$9$k$+$H$+$OG:$^$7e(B
e$B$$$G$9$,!#e(B

e$B%U%i%0$r;H$&[email protected]$H!"JQ49ITG=$JJ8;z$rG$0U$N;XDjJ8;z$KCV49$9$ke(B
e$B$3$H$O$G$-$J$$$h$&$J5$$,$7$^$9$,!"Nc$($P%9%l%C%I%m!<%+%k$JFCe(B
e$B<lJQ?t$G;XDj$9$k$H$+$$$&$3$H$r9M$($F$*$i$l$^$9$+e(B?

| >(3) C API
| > String#encodee$B$KAjEv$9$ke(BC APIe$B$,M_$7$$$G$9!#e(B
| > e$B$^$"!"$=$N$^$^$J$ie(Bfuncalle$B$G$b$$$$$s$G$9$1$I!"$G$-$l$P$b$&e(B
| > e$B$A$g$C$He(BCe$B4s$j$NE[$,M_$7$$$G$9$M!#e(B
|
| funcall e$B$He(B C API e$B$N$H$3$m$O$3$A$i$NJY6/ITB-$G$A$g$C$HJ,$+$j$^$;$s$,!"e(B
| e$B6qBNE*$KNc$($P$I$&$$$&Iw$Ke(B C e$B$N4X?t$r8F$S$?$$$G$9$+!#e(B

e$BJQ4985e(BCe$B%P%$%HG[Ns!“JQ4985e(Bencodinge$B!“[email protected](Bencodinge$B!“JQ49<:GT;~e(B
e$BBP1~J}K!!”$H$$$&$h$&$J0z?t$G8F$Y$k$H4r$7$$$G$9!#e(B
e$BJQ49<:GT;~BP1~J}K!$H$7$F!”%(%i!<!”;XDjJ8;z$KCV$-49$(!"$N$$$:e(B
e$B$l$+$rA*$Y!"%(%i!<;~$K$ONc30$G$J$/La$jCM$G<($7$F$b$i$($k$H4re(B
e$B$7$$$G$9$M!#e(B

| e$B;~4|E*$K$O;0<T$H$b$=$&1s$/$O$J$$$+$H;W$$$^$9$,!"3X9;$O:#0lHVe(B
| e$BK;$7$$;~4|$J$N$GM>$jJ]>Z$O$G$-$J$$$H;W$$$^$9!#e(B

e$B;[email protected]$H$+$G$7$g$&$+!#e(B
e$B6[5^$K:$$C$F$$$k$o$1$G$O$J$/$F!“2]Bj$,$”$k$H$$$&%j%9%H%"%C%We(B
e$B$N0UL#$GEj$2$?$b$N$G$9$N$G!"$I$&$+K\6H$N$[$&$rM%@h$7$F$/[email protected]$5e(B
e$B$$!#e(B
e$B$*K;$7$$$H$3$m?WB.$JJV?.$"$j$,$H$&$4$6$$$^$7$?!#e(B

e$B$=$l$G$O!#e(B

e$BCfB<$5$s!"$3$s$K$A$O!#e(B

At 17:59 08/01/21, you wrote:

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

transcodee$B$K4X$7$F!“e([email protected]$[$IMWK>$,$”$k$N$G$9$,!"e(B

e$BMWK>$"$j$,$H$&$4$6$$$^$9!#;H$&?M$,$$$k$+M>$jJ,$+$j$^$;$s$G$7$?!#e(B

e$B$=$l$>$l<B8=2De(B
[email protected](B(e$B$H!"<B8=$9$k$J$i;~4|e(B)e$B$O$I$s$J$b$s$G$7$g$&$+e(B?

(1) Windows-31Je$B%5%]!<%He(B
e$B3N$+0JA0$Ke([email protected]@8$,BP1~M=Dj$H$$C$7$c$C$F$$i$l$?$H;We(B
e$B$$$^$9!#e(B
e$BJL$K5^$+$9$o$1$8$c$J$$$G$9$,!"0l1~3NG’$H$$$&$3$H$G!#e(B

e$B$3$A$i$G$O$b$&4{$K0l1~$d$C$?$s$G$9$,!"$=$N;~$K:#$Ne(B Shift_JIS
e$B$He(B EUC-JP e$B$N$H$3$m$K$$$/$D$+$N5?Ld$,$G$F$-$F!"$3$l$r$-$A$s$He(B
[email protected]$$=P$7$FAjCL$7$h$&$H;W$C$F$$$^$9!#e(B

(2) e$BJQ49$G$-$J$$J8;z$N07$$e(B
e$B8=>u$OJQ49$G$-$J$$J8;z$,$"$k$HNc30$,H/@8$7$^$9$,!"$=$&$$e(B
e$B$&J8;z$r!Ve(B?e$B!W$d!V".!W$J$I$KCV$-49$($F=hM}$rB39T$7$?$$>lLLe(B
e$B$b$=$l$J$j$K$"$k$H;W$$$^$9!#e(B
[ruby-core:15036]e$B$"$?$j$+$i$NOC$,$=$&[email protected]$H;W$$$^$9$,!"$3$le(B
e$B$O$I$&$J$j$=$&$G$7$g$&$+e(B?

e$B$=$&$G$9$M!#<BAu$O$o$j$H4JC1$G$9$,!“e(BAPI
e$B$r7h$a$J$$$H9T$1$J$$$G$9!#e(B
e$B:G=E$K%V%m%C%/$b$&$^$/;H$$$?$$$G$9$,!”$3$l$O$b$&>/[email protected][email protected]$H;W$$$^$9!#e(B
e$B8=:9M$($F$$$k$N$ONc$($Pe(B File.fnmatch
e$B$
$?$$$J%U%i%0$r;H$&$3$H$G$9!#e(B

e$BNc$($Pe(B

s.encode(‘EUC-JP’, String::ENCODE_SUBSTITUTE_TARGET_DEFAULT)
e$B$H$+e(B
s.encode(‘Shift_JIS’, ‘UTF-8’, String::DROP_BROKEN_BYTES)
e$B$H$+!#L^[email protected]$b$&>/$7C;$/$F$b$$$$$+$H;W$$$^$9e(B :-)e$B!#e(B

(3) C API
String#encodee$B$KAjEv$9$ke(BC APIe$B$,M_$7$$$G$9!#e(B
e$B$^$"!"$=$N$^$^$J$ie(Bfuncalle$B$G$b$$$$$s$G$9$1$I!"$G$-$l$P$b$&e(B
e$B$A$g$C$He(BCe$B4s$j$NE[$,M_$7$$$G$9$M!#e(B

funcall e$B$He(B C API
e$B$N$H$3$m$O$3$A$i$NJY6/ITB-$G$A$g$C$HJ,$+$j$^$;$s$,!"e(B
e$B6qBNE*$KNc$($P$I$&$$$&Iw$Ke(B C e$B$N4X?t$r8F$S$?$$$G$9$+!#e(B

e$B;~4|E*$K$O;0<T$H$b$=$&1s$/$O$J$$$+$H;W$$$^$9$,!"3X9;$O:#0lHVe(B
e$BK;$7$$;~4|$J$N$GM>$jJ]>Z$O$G$-$J$$$H;W$$$^$9!#e(B

e$B$*4j$$$P$C$+$j$K$J$C$A$c$C$F$^$9$,!"FbMF$K$h$C$F$O<BAuLL$G$*e(B
e$B<jEA$$$G$-$k$+$b$7$l$^$;$se(B(e$B$G$-$J$$$+$b$7$l$^$;$se(B)e$B!#e(B

e$B$"$j$,$H$&$4$6$$$^$7$?!#$3$l$+$i$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]

[email protected]@%$G$9!#e(B

Martin D. wrote:

(1) Windows-31Je$B%5%]!<%He(B
e$B3N$+0JA0$Ke([email protected]@8$,BP1~M=Dj$H$$C$7$c$C$F$$i$l$?$H;We(B
e$B$$$^$9!#e(B
e$BJL$K5^$+$9$o$1$8$c$J$$$G$9$,!"0l1~3NG’$H$$$&$3$H$G!#e(B

e$B$3$A$i$G$O$b$&4{$K0l1~$d$C$?$s$G$9$,!"$=$N;~$K:#$Ne(B Shift_JIS
e$B$He(B EUC-JP e$B$N$H$3$m$K$$$/$D$+$N5?Ld$,$G$F$-$F!"$3$l$r$-$A$s$He(B
[email protected]$$=P$7$FAjCL$7$h$&$H;W$C$F$$$^$9!#e(B

Shift_JIS e$B$He(B EUC-JP
e$B$N5?Ld$C$F%^%C%T%s%0$NOC$G$9$+!)$=$l$G$7$?$i8e$G$G$be(B
[email protected]$G$-$^$9$7!"$H$j$"$($:e(BWindows-31J e$B$r;H$$$?$$$G$9!#e(B

Shift_JIS e$B$He(B EUC-JP e$B$Oe(B GNU libiconv
e$B$"$?$j$K$=$m$($k$N$,L5Fq$J$N$G$9$+e(B
e$B$M$’!&!&!&!"2~$a$F%^%C%T%s%08+D>$7$F$*$-$^$9!#e(B

e$BNc$($Pe(B

s.encode(‘EUC-JP’, String::ENCODE_SUBSTITUTE_TARGET_DEFAULT)
s.encode(‘Shift_JIS’, ‘UTF-8’, String::DROP_BROKEN_BYTES)

Perl/Encode e$B$bDj?t$G%%W%7%g%s$r;XDj$9$kJ}<0$G$7$?$M!#Dj?t$Oe(B
String e$B$NCfe(B
e$B$J$N$+$J$!!&!&!&!">/$7e(B Encoding
e$B$HLB$&$H$3$m$+$b$7$l$^$;$s!#>-MhE
$K%Ve(B
e$B%m%C%/$bMQ0U$9$kM=Dj$J$i$P!“CV49!&L5;k!&%(%i!<$,$”$l$PEvLL$O2?$H$+$J$j$=e(B
e$B$&$J5$$b$7$^$9!#e(B

e$B$A$J$_$K$4B8CN$+$b$7$l$^$;$s$,!"e(BPerl/Encode
[email protected]$H$3$s$J46$8$N$h$&$G$9!#e(B
http://search.cpan.org/dist/Encode/Encode.pm#Handling_Malformed_Data

[email protected]@%$G$9!#e(B

U.Nakamura wrote:

|
| e$BNc$($Pe(B
|
| s.encode(‘EUC-JP’, String::ENCODE_SUBSTITUTE_TARGET_DEFAULT)
| e$B$H$+e(B
| s.encode(‘Shift_JIS’, ‘UTF-8’, String::DROP_BROKEN_BYTES)
| e$B$H$+!#L^[email protected]$b$&>/$7C;$/$F$b$$$$$+$H;W$$$^$9e(B :-)e$B!#e(B

ruby-coree$B$K$"$C$?%V%m%C%/$r;H$&0F$O%9%^!<%[email protected]$H$O;W$$$^$9!#e(B
statefule$B$Je(Bencodinge$B$+$i$NJQ49$N<:GT;~$K$I$&$9$k$+$H$+$OG:$^$7e(B
e$B$$$G$9$,!#e(B

stateful encoding e$B$r=hM}$9$k$O!"e(BISO 2022
e$B$K$D$$$F$J$i$PD>A0$Ne(B escape
sequence
e$B$H$$$&$+!"8=:$NJ8;z=89gHV9f$H%P%$%HNs$,$"$l$P$h$$$+$H!#$3$3$Ge(B
1 byte
e$B$r%V%m%C%/$KEO$9$+!“B?%P%$%HI,MW$J>l9g$J$3$H$r9M$($FJ#?t%P%$%HEOe(B
e$B$9$+!”$$$C$=$N$3$H%P%$%HNs$9$Y$F$H8=:
$Ne(B index
e$B$rEO$9$+$,LB$$$I$3$m$G$9e(B
e$B$+$M$’!#e(B

e$B:G8e$N$r;H$C$F!"$5$i$K$$$m$$$m>pJs$rEO$7$?>l9g!"$3$s$J46$8$G$7$g$&$+e(B
“Ruby\e$B$k$S!<9H6L\e(IYK^0\e(B”.encode(“UTF-8”) do |
from, # encoding convert from
to, # encoding convert to
state, # current state integer
bytes, # bytes string converting
idx, # current index
|
if iso_2022_single_byte_charset(state)
“\x%X” % bytes[idx]
elsif bytes.length >= idx + 1
# e$B=*N;e(B
else
# idx e$B$re(B2e$B$D?J$a$5$;$k=hM}e(B
“\x%X” % [bytes[idx] << 8 + bytes[idx+1]]
end
end

e$B>pJs$r8:$i$7$F$9$C$-$j$5$;$?$$>l9g$Oe(B
“Ruby\e$B$k$S!<9H6L\e(IYK^0\e(B”.encode(“UTF-8”) do |
state, # current state integer
bytes, # array of unknown byte
|
if iso_2022_single_byte_charset(state)
“\x%X” % bytes[0]
elsif buf.length == 0
nil
else
“\x%X\x%X” % bytes
end
end

e$B%V%m%C%/$+$i$NLa$jCM$,e(B

nil: e$B<!$N%P%$%H$rFI$s$Ge(B bytes

e$B$KDI2C$7!"%V%m%C%/$r8F$SD>$9e(B

string: bytes e$B$r6u$K$7$F<!$N%P%$%H$N=hM}$rB39Te(B

e$BI|5l;~$Ke(B state e$B$NA`:n$b$7$?$$$H$J$k$H!"e(Bconverter
e$B%*%V%8%’%/%H$rJV$7$?J}e(B
e$B$,$$$$$N$+$J$!!#e(B

e$B%U%i%0$r;H$&[email protected]$H!"JQ49ITG=$JJ8;z$rG$0U$N;XDjJ8;z$KCV49$9$ke(B
e$B$3$H$O$G$-$J$$$h$&$J5$$,$7$^$9$,!"Nc$($P%9%l%C%I%m!<%+%k$JFCe(B
e$B<lJQ?t$G;XDj$9$k$H$+$$$&$3$H$r9M$($F$*$i$l$^$9$+e(B?

e$B%(%s%3!<%G%#%s%0$4$H$K%G%U%)%k%H$NCV49J8;z$,7h$^$C$F$$$k$N$G!“DL>o$O$=$le(B
e$B$rMQ$$$l$P$$$$$+$H!#JQ$($?$$>l9g$O%V%m%C%/$G!#%O%C%7%e$J$j$GEO$9$H$$$&J}e(B
e$BK!$b$”$k$G$7$g$&$M!#e(B

e$B<B:]$N$H$3$m!"$"$^$jG$0U$NCV49J8;z$rMQ$$$?$$$H$$$&%K!<%:$OB?$/$O$J$$5$$Oe(B
e$B$7$^$9!#e(B

e$BJQ49<:GT;~BP1~J}K!$H$7$F!"%(%i!<!";XDjJ8;z$KCV$-49$(!"$N$$$:e(B
e$B$l$+$rA*$Y!"%(%i!<;~$K$ONc30$G$J$/La$jCM$G<($7$F$b$i$($k$H4re(B
e$B$7$$$G$9$M!#e(B

e$B;W$&$Ke(B mbsrtowcs e$BE*$Je(B API [email protected]$H;W$$$^$9!#e(B

e$B$^$:0z?t$,e(B

  • e$BJQ4985%(%s%3!<%G%#%s%0e(B rb_encoding *src_enc
  • e$BJQ4985e(B char **src_p
  • e$BJQ4985$N=*$o$je(B char *src_e
  • [email protected]%(%s%3!<%G%#%s%0e(B rb_encoding *dest_enc
  • [email protected](B char **dest_p
  • [email protected]$N=*$o$je(B char *dest_e
  • e$BJQ49%*%W%7%g%se(B int opt
  • e$B>uBVe(B e$BFH<+$N9=B$BNe(B tcstate_t *state

e$BLa$jCM$Oe(B size_t e$B$G!"e(B

  • 0 e$B$^[email protected]$NCMe(B: [email protected](B
    e$B>:Ye(B:
    e$B85$N%P%$%HNs$r$9$Y$FJQ49$7=$($?!#e(B
    [email protected]$7$?J8;z?t!#e(B
    fallback e$B$,e(B skip e$B$de(B replace e$B$N>l9g$O>o$K$3$l!#e(B
    e$B0z?t$NJQ2=e(B:
    src_p: src_e e$B$HEy$7$$e(B
    dest_p: dest_e e$B$HF1$8$+$=$l$h$jA0!#JQ498e$N%P%$%HNs$N=
    $o$je(B
    state: e$B=i4|>uBVe(B
    NOTE:
    e$B$3$3$Ge(B state e$B$O=i4|>uBV$G$J$/e(B ascii only
    e$B$+$I$&$+$J$I$re(B
    e$B$D$C$3$s$G$*$$$F$b$$$$$+$b!#e(B

  • -1: [email protected]$J%P%$%HNse(B
    e$B>:Ye(B:
    e$B85$N%(%s%3!<%G%#%s%0$Ne(B CES
    [email protected]$J%P%$%H$,B8:_$7$?!#e(B
    e$B0z?t$NJQ2=e(B:
    src_p: [email protected]$J%P%$%[email protected],e(B
    dest_p: e$BJQ49:Q$_e(B+1
    state: [email protected]$J%P%$%HNs$rFI$`D>A0$N>uBVe(B
    NOTE:
    EILSEQ e$B$bI|5l$9$k$s$G$9$h$M!)e(Bmbrtowc e$B$de(B iconv
    e$B$O$3$3$GD|$a$^$9$,!#e(B

  • -1: e$BIT40A4$J%P%$%HNse(B
    e$B>:Ye(B:
    e$B85$N%(%s%3!<%G%#%s%0$Ne(B CES
    e$B$H$7$FIT40A4$J%P%$%H$,B8:_$7$?!#e(B
    e$B$h$&$O?,@Z$l%H%s%!#e(B
    e$B0z?t$NJQ2=e(B:
    src_p: e$BIT40A4$J%P%$%[email protected],e(B
    dest_p: e$BJQ49:Q$_e(B+1
    state: e$BIT40A4$J%P%$%HNs$rFI$`D>A0$N>uBVe(B
    NOTE:
    stateful encoding e$B$N>l9g$O!"e(Bshift sequence
    e$B$N<!$NJ8;z$^$Ge(B
    [email protected]$H$3$m$G=i$a$F!VJ8;z!W$H$9$k!#e(B

  • -3: e$BJQ49ITG=$JJ8;ze(B
    e$B>:Ye(B:
    e$B85$N%(%s%3!<%G%#%s%0$Ne(B CES [email protected]$,!"e(B
    e$BJQ49I=$K:$C$F$$$J$$Ey$NM}M3$GJQ49$G$-$J$$!#e(B
    e$B0z?t$NJQ2=e(B:
    src_p: e$BJQ49ITG=$JJ8;[email protected]$9$k%P%$%[email protected],e(B
    dest_p: e$BJQ49:Q$_e(B+1
    state: e$BJQ49ITG=$JJ8;[email protected]$9$k%P%$%HNs$rFI$`D>A0$N>uBVe(B
    NOTE:
    e$B$I$3$^$G$,$=$N!VJQ49ITG=$JJ8;z!W$J$N$+$,J,$+$i$J$$!#e(B
    state e$B$NJ}$G2?$H$+$9$k$+!#e(B

  • -4: e$BMFNL%*!<%P!<e(B
    e$B>:Ye(B:
    dest_p == dest_e e$B$K$J$C$F$7$^$C$?e(B
    e$B0z?t$NJQ2=e(B:
    src_p: e$BL$JQ49$J%P%$%[email protected],e(B
    dest_p: dest_e e$B$HEy$7$$$+$=$N>/$7A0e(B
    state: e$B:[email protected]$7$?>uBVe(B

e$B;H$$J}$Oe(B

char *src_p = RSTRING_PTR(str);
char *src_e = RSTRING_END(str);
char **src_pp = &src_p;

while (*src_pp != src_e) {
tcstate_t state = 0;
size_t err = 0;
err = transcode_convert(
enc_windows_31j, src_pp, src_e,
enc_utf_8, dest_pp, dest_e,
TRANSCODE_FB_ERROR, &state);
if (err >= 0) break;
switch(err) {
case -1:
*(dest_pp++) = ‘?’;
break;
case -2:
static const *hex_tbl = “0123456789ABCDEF”;
*(dest_pp++) = ‘\’;
*(dest_pp++) = ‘x’;
*(dest_pp++) = hex_tbl[((*src_pp)>>8)&0xF];
*(dest_pp++) = hex_tbl[((*src_pp) )&0xF];
break;
case -3:
// expand
break;
default:
// reserved
break;
}
src_pp++;
}

e$BJY6/ITB-$J$;$$$G$3$l$G==J,$+$o$+$j$^$;$s$,!"$?$V$sBgBN$3$s$J46$8$G$7$g$&$+!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:33286] Re: requests to transcode”
on Jan.23,2008 07:41:13, [email protected] wrote:
| stateful encoding e$B$r=hM}$9$k$O!"e(BISO 2022 e$B$K$D$$$F$J$i$PD>A0$Ne(B escape
| sequence e$B$H$$$&$+!"8=:$NJ8;z=89gHV9f$H%P%$%HNs$,$"$l$P$h$$$+$H!#$3$3$Ge(B
| 1 byte e$B$r%V%m%C%/$KEO$9$+!“B?%P%$%HI,MW$J>l9g$J$3$H$r9M$($FJ#?t%P%$%HEOe(B
| e$B$9$+!”$$$C$=$N$3$H%P%$%HNs$9$Y$F$H8=:
$Ne(B index e$B$rEO$9$+$,LB$$$I$3$m$G$9e(B
| e$B$+$M$’!#e(B

e$B$"$s$^$j$?$/$5$s%V%m%C%/$K0z?t$rEO$9$h$&$K$7$F$b=q$-4V0c$($ke(B
[email protected]$1$J$N$G!"@[email protected]%$5$s$Ne(B2e$B$DL$N0F$N$h$&$Ke(B2e$B8DDxEY$KN1$a$k$+!">pe(B
e$BJs$r$^$H$a$?%/%i%9$N%$%s%9%?%s%9$re(B1e$B8DEO$9$+!"$I$A$i$+$,8=<BEe(B
e$B$G$7$g$&$M!#e(B
e$B$H$j$"$($:8e<T$K$7$F$
$1$P8e$G;EMM$rDI2C$G$-$k$N$G!"<BAu$9$ke(B
e$BJ}$O5$$,3Z$+$b$7$l$^$;$s!#e(B

| > e$B%U%i%0$r;H$&[email protected]$H!"JQ49ITG=$JJ8;z$rG$0U$N;XDjJ8;z$KCV49$9$ke(B
| > e$B$3$H$O$G$-$J$$$h$&$J5$$,$7$^$9$,!"Nc$($P%9%l%C%I%m!<%+%k$JFCe(B
| > e$B<lJQ?t$G;XDj$9$k$H$+$$$&$3$H$r9M$($F$*$i$l$^$9$+e(B?
|
| e$B%(%s%3!<%G%#%s%0$4$H$K%G%U%)%k%H$NCV49J8;z$,7h$^$C$F$$$k$N$G!“DL>o$O$=$le(B
| e$B$rMQ$$$l$P$$$$$+$H!#JQ$($?$$>l9g$O%V%m%C%/$G!#%O%C%7%e$J$j$GEO$9$H$$$&J}e(B
| e$BK!$b$”$k$G$7$g$&$M!#e(B

e$B!V7h$^$C$F$k!W$H$$$&$N$O!"2?$G7h$^$C$F$k$s$G$7$g$&e(B?

e$BITJY6/$G$9$_$^$;$se(B

e$B%V%m%C%/EO$;$k$h$&$K$J$l$P$I$&$K$G$b$J$k$N$G!"$=$&$$$&J}[email protected](B
e$B$H$$$&$3$H$,7h$^$k$N$J$i!";H$&J}$H$7$F$O$"$^$j5$$K$O$J$j$^$;e(B
e$B$s$1$I$M!#e(B

| > e$BJQ4985e(BCe$B%P%$%HG[Ns!“JQ4985e(Bencodinge$B!“[email protected](Bencodinge$B!“JQ49<:GT;~e(B
| > e$BBP1~J}K!!”$H$$$&$h$&$J0z?t$G8F$Y$k$H4r$7$$$G$9!#e(B
| > e$BJQ49<:GT;~BP1~J}K!$H$7$F!”%(%i!<!”;XDjJ8;z$KCV$-49$(!"$N$$$:e(B
| > e$B$l$+$rA*$Y!"%(%i!<;~$K$ONc30$G$J$/La$jCM$G<($7$F$b$i$($k$H4re(B
| > e$B$7$$$G$9$M!#e(B
|
| e$B;W$&$Ke(B mbsrtowcs e$BE*$Je(B API [email protected]$H;W$$$^$9!#e(B

e$B$"$"!"$$$d!"$J$s$H$$$&$+!"C1$Ke(B
rb_funcall(str, rb_intern(“encode”), 1, enc);
e$B$H=q$+$:$KD>@\e(Brb_str_transcode()[email protected]$1$H$$$&e(B
[email protected]$1$G$9!#e(B
[email protected]$7e(Brb_str_transcode()e$B$=$N$b$N$Oe(Brubye$B%$%s%?%W%j%?I>2A4o$+$ie(B
e$B8F$P$l$k$3$HA0Ds$J$N$G!“e(Bargve$B$r$P$i$7$?>uBV$G8F$Y$k$b$N$,M_$7e(B
e$B$$$J!”$H$$$&[email protected]$1e(B…

e$BJQ49<:GT;~BP1~J}K!$H$$$&0z?t$,$"$k$H$$$$$H$$$&$N$O!“e(BString#encode
e$B<+BN$,$=$&$$$&J}8~$K$J$k$O$:$J$N$G!”$H$$$&[email protected]$1$G$9!#e(B

e$B$H$$$o$o$1$G!“La$jCM$Oe(BVALUE(String)e$B$G$$$$$G$9$7!”<:GT$Oe(Bnile$B$Ge(B
e$B65$($F$/$l$l$P$b$&==J,$G!"[email protected]&$O<:GT$7$F$?$i8e$O;`$L$J$je(B
e$B2?$J$j$9$l$P$$$$$d$H;W$C$F$$$?$N$G<:GT$7$?$H$3$m$+$i:F3+$H$+e(B
e$B$OA4A39M$($F$$$^$;$s$G$7$?!#e(B

| e$BJY6/ITB-$J$;$$$G$3$l$G==J,$+$o$+$j$^$;$s$,!"$?$V$sBgBN$3$s$J46$8$G$7$g$&$+!#e(B

e$B==J,$H$$$&$+!“I!7l$,e(B :slight_smile:
e$B;d$H$7$F$O$3$3$^[email protected]$J$b$N$,M_$7$+$C$?$o$1$G$O$J$/$F!”>e=R$Ne(B
e$BDL$j$G$9!#e(B

[email protected]@%$5$s$N0F$O!“e(BString#encodee$B$N%V%m%C%/0z?t$D$-HG$KBP1~$7$?e(BAPI
e$B$H$$$&$3$H$K$J$k$+$H;W$&$N$G$9$,!”$3$l$O$^$"$3$l$H$7$F!";d$,e(B
e$BM_$7$+$C$?$N$O$b$C$H<j7Z$K8F$Y$k%7%s%W%k$JE[$G$9!"$O$$!#e(B

e$B$=$l$G$O!#e(B

[email protected]@%$G$9!#e(B

U.Nakamura wrote:

e$BJs$r$^$H$a$?%/%i%9$N%$%s%9%?%s%9$re(B1e$B8DEO$9$+!"$I$A$i$+$,8=<BEe(B
e$B$G$7$g$&$M!#e(B
e$B$H$j$"$($:8e<T$K$7$F$
$1$P8e$G;EMM$rDI2C$G$-$k$N$G!"<BAu$9$ke(B
e$BJ}$O5$$,3Z$+$b$7$l$^$;$s!#e(B

[email protected]$He(B converer e$B0l$D$G$9$+$M$’!#e(B
e$BI,MW$J>pJs$Oe(B [ruby-dev:33286] e$B$Ne(Bmbsrtowcs e$BIwe(B API
e$B$HF1$8$J$N$G!"8e$O$=$le(B
e$B$r$I$&5M$a9~$`$+$H!"e(Bstate e$B$r$I$&J];}$7$I$&JV$9$+$G$7$g$&$+!#e(B

| > e$B%U%i%0$r;H$&[email protected]$H!"JQ49ITG=$JJ8;z$rG$0U$N;XDjJ8;z$KCV49$9$ke(B
| > e$B$3$H$O$G$-$J$$$h$&$J5$$,$7$^$9$,!"Nc$($P%9%l%C%I%m!<%+%k$JFCe(B
| > e$B<lJQ?t$G;XDj$9$k$H$+$$$&$3$H$r9M$($F$*$i$l$^$9$+e(B?
|
| e$B%(%s%3!<%G%#%s%0$4$H$K%G%U%)%k%H$NCV49J8;z$,7h$^$C$F$$$k$N$G!“DL>o$O$=$le(B
| e$B$rMQ$$$l$P$$$$$+$H!#JQ$($?$$>l9g$O%V%m%C%/$G!#%O%C%7%e$J$j$GEO$9$H$$$&J}e(B
| e$BK!$b$”$k$G$7$g$&$M!#e(B

e$B!V7h$^$C$F$k!W$H$$$&$N$O!"2?$G7h$^$C$F$k$s$G$7$g$&e(B?

e$BITJY6/$G$9$_$^$;$se(B

e$B$"!"%&%=$G$9!#e(B
ICU e$B$d$=$l$r0z$$$F$ke(B Encode e$B$Oe(B ucm e$B%U%!%$%kCf$Ne(B
e$B$G!“e(B
Citrus e$B$N>l9g$O%(%s%3!<%G%#%s%0Dj5A%U%!%$%k$Ne(B INVALID e$B$G!“e(B
e$B!V<BAu$,7h$a$F$k!W%1!<%9$,B?$$!”$G$9$M!#e(B
e$B$C$H!”;W$C$?$ie(B GNU libiconv
e$B$O%*%W%7%g%s$GM?$($5$;$F$$$^$7$?!#e(B

e$B$H$$$&$+!"$3$l$C$F$h$/$h$/9M$($k$H!"e(B

  • e$B%(%i!<e(B
  • e$BL5;ke(B
  • e$BFCDj$NCV49J8;ze(B
  • e$BBP1~$9$kJ8;zNse(B (U+XXXXe$B$de(B\xXXe$B$de(B\uXXXXe$B$J$Ie(B)
    e$B$K$J$k$o$1$G!“L5;k$r6uJ8;z!“BP1~$9$kJ8;zNs$r%U%)!<%^%C%HJ8;zNs$HFI$_BX$(e(B
    e$B$l$P!”%(%i!<0J30$Oe(B string
    e$B$J$o$1$G!”$3$l$C$FDj?t$8$c$J$/$FJ8;zNs$G$$$$5$e(B
    e$B$,$7$F$-$^$7$?!#e(B

e$B$D$^$j!"0J2<$NDL$j!#e(B

  • e$B%(%i!<e(B: nil
  • e$BL5;ke(B: “”
  • e$BCV49J8;ze(B: “?” “e$B”.e(B" “\uFFFD” e$BEye(B
  • e$BBP1~$9$kJ8;zNse(B “U+%4X” “\x%2X” “\u{%X}” e$BEye(B

e$B$C$H!";W$C$?$N$G$9$,!"%P%$%[email protected]$J>l9g$HJQ49$G$-$J$$J8;z$N>l9g$GOCe(B
e$B$,0c$&$h$&$J5$$,$A$i$j!#$b$&[email protected]}$,I,MW$+$b!#e(Bmb2mb
e$B$C$F0EL[$Ke(B
mb.valid? -> mb2wc -> wc2mb
e$B$7$F$k$N$G!"$I$NCJ3,$G;`[email protected]$+$K$h$C$FOC$,JQe(B
e$B$o$k$s$G$9$h$M!#e(B

e$B$=$&$$$($PB?CJJQ49$C$F$N$b$"$C$?$J$!!&!&!&!#e(B

e$B$H=q$+$:$KD>@\e(Brb_str_transcode()[email protected]$1$H$$$&e(B
[email protected]$1$G$9!#e(B
[email protected]$7e(Brb_str_transcode()e$B$=$N$b$N$Oe(Brubye$B%$%s%?%W%j%?I>2A4o$+$ie(B
e$B8F$P$l$k$3$HA0Ds$J$N$G!“e(Bargve$B$r$P$i$7$?>uBV$G8F$Y$k$b$N$,M_$7e(B
e$B$$$J!”$H$$$&[email protected]$1e(B…

e$B$"!<!"$J$k$[$I!#ESCf$G$b$&$A$g$C$H>e$N%l%$%d!<%+%J!<$C$F5$$O$7$?$s$G$9e(B
e$B$,!"$^$!HwK:O?Be$j$K$^$H$a$F$b$$$$$+$J!<$H!#e(B

e$BJQ49<:GT;~BP1~J}K!$H$$$&0z?t$,$"$k$H$$$$$H$$$&$N$O!“e(BString#encode
e$B<+BN$,$=$&$$$&J}8~$K$J$k$O$:$J$N$G!”$H$$$&[email protected]$1$G$9!#e(B

e$B$H$$$o$o$1$G!“La$jCM$Oe(BVALUE(String)e$B$G$$$$$G$9$7!”<:GT$Oe(Bnile$B$Ge(B
e$B65$($F$/$l$l$P$b$&==J,$G!"[email protected]&$O<:GT$7$F$?$i8e$O;`$L$J$je(B
e$B2?$J$j$9$l$P$$$$$d$H;W$C$F$$$?$N$G<:GT$7$?$H$3$m$+$i:F3+$H$+e(B
e$B$OA4A39M$($F$$$^$;$s$G$7$?!#e(B

e$B$?$V$s!"!V2?$J$j$9$k!W$?$a$K:F3+$,I,MW$8$c$J$$$+$J!<$H;W$$$^$9!"$?$V$s!#e(B

[email protected]@%$5$s$N0F$O!“e(BString#encodee$B$N%V%m%C%/0z?t$D$-HG$KBP1~$7$?e(BAPI
e$B$H$$$&$3$H$K$J$k$+$H;W$&$N$G$9$,!”$3$l$O$^$"$3$l$H$7$F!";d$,e(B
e$BM_$7$+$C$?$N$O$b$C$H<j7Z$K8F$Y$k%7%s%W%k$JE[$G$9!"$O$$!#e(B

e$B%V%m%C%/0z?tIU$-HG$re(B e$B=c?h$Je(B C
e$B$N%l%$%d!<$G$d$k$H$3$&$J$C$F$7$^$&$H$$$&Nce(B
e$B$G$9$+$M!#<:GT$7$?$iL5;k$+$=$N$^$^;`$s$G$7$^$&$J$iBgI}$K%7%s%W%k$K$J$k$Ge(B
e$B$7$g$&!#e(B

[email protected]!"<:GT$r5_$$&$H$9$k$H:F3+$dCfCG>l=j$N>pJs$,I,MW$K$J$C$F!":F3+2DG=$Ke(B
e$B$9$k$H>uBV$,I,MW$K$J$k$H$$$&$h$&$K>pJs$,A}$($F$$$/$N$G!"$H$j$^$o$7$OB?>/e(B
e$B3Z$K$J$C$F$b!"K<AE
$KI,MW$J>pJs$O$"$^$jJQ$o$i$J$$$+$J$!$H5$$b$7$^$9!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:33295] Re: requests to transcode”
on Jan.23,2008 12:59:04, [email protected] wrote:
| > e$B$"$s$^$j$?$/$5$s%V%m%C%/$K0z?t$rEO$9$h$&$K$7$F$b=q$-4V0c$($ke(B
| > [email protected]$1$J$N$G!"@[email protected]%$5$s$Ne(B2e$B$DL$N0F$N$h$&$Ke(B2e$B8DDxEY$KN1$a$k$+!">pe(B
| > e$BJs$r$^$H$a$?%/%i%9$N%$%s%9%?%s%9$re(B1e$B8DEO$9$+!"$I$A$i$+$,8=<BEe(B
| > e$B$G$7$g$&$M!#e(B
| > e$B$H$j$"$($:8e<T$K$7$F$
$1$P8e$G;EMM$rDI2C$G$-$k$N$G!"<BAu$9$ke(B
| > e$BJ}$O5$$,3Z$+$b$7$l$^$;$s!#e(B
|
| [email protected]$He(B converer e$B0l$D$G$9$+$M$’!#e(B
| e$BI,MW$J>pJs$Oe(B [ruby-dev:33286] e$B$Ne(Bmbsrtowcs e$BIwe(B API e$B$HF1$8$J$N$G!"8e$O$=$le(B
| e$B$r$I$&5M$a9~$`$+$H!"e(Bstate e$B$r$I$&J];}$7$I$&JV$9$+$G$7$g$&$+!#e(B

e$B$H!"$J$k$H;W$$$^$9!#e(B

| > | e$B%(%s%3!<%G%#%s%0$4$H$K%G%U%)%k%H$NCV49J8;z$,7h$^$C$F$$$k$N$G!“DL>o$O$=$le(B
| > | e$B$rMQ$$$l$P$$$$$+$H!#JQ$($?$$>l9g$O%V%m%C%/$G!#%O%C%7%e$J$j$GEO$9$H$$$&J}e(B
| > | e$BK!$b$”$k$G$7$g$&$M!#e(B
| >
| > e$B!V7h$^$C$F$k!W$H$$$&$N$O!“2?$G7h$^$C$F$k$s$G$7$g$&e(B?
| > # e$BITJY6/$G$9$_$^$;$se(B
|
| e$B$”!"%&%=$G$9!#e(B
| ICU e$B$d$=$l$r0z$$$F$ke(B Encode e$B$Oe(B ucm e$B%U%!%$%kCf$Ne(B e$B$G!“e(B
| Citrus e$B$N>l9g$O%(%s%3!<%G%#%s%0Dj5A%U%!%$%k$Ne(B INVALID e$B$G!“e(B
| e$B!V<BAu$,7h$a$F$k!W%1!<%9$,B?$$!”$G$9$M!#e(B
| e$B$C$H!”;W$C$?$ie(B GNU libiconv e$B$O%*%W%7%g%s$GM?$($5$;$F$$$^$7$?!#e(B

e$B$J$k$[$I!#e(B
nkfe$B$b%*%W%7%g%s$GM?$($5$;$F$$$^$9$h$M!#e(B

| e$B$H$$$&$+!"$3$l$C$F$h$/$h$/9M$($k$H!"e(B
| * e$B%(%i!<e(B
| * e$BL5;ke(B
| * e$BFCDj$NCV49J8;ze(B
| * e$BBP1~$9$kJ8;zNse(B (U+XXXXe$B$de(B\xXXe$B$de(B\uXXXXe$B$J$Ie(B)
| e$B$K$J$k$o$1$G!“L5;k$r6uJ8;z!“BP1~$9$kJ8;zNs$r%U%)!<%^%C%HJ8;zNs$HFI$_BX$(e(B
| e$B$l$P!”%(%i!<0J30$Oe(B string e$B$J$o$1$G!”$3$l$C$FDj?t$8$c$J$/$FJ8;zNs$G$$$$5$e(B
| e$B$,$7$F$-$^$7$?!#e(B
|
| e$B$D$^$j!“0J2<$NDL$j!#e(B
| * e$B%(%i!<e(B: nil
| * e$BL5;ke(B: “”
| * e$BCV49J8;ze(B: “?” “e$B”.e(B” “\uFFFD” e$BEye(B
| * e$BBP1~$9$kJ8;zNse(B “U+%4X” “\x%2X” “\u{%X}” e$BEye(B

e$B;d$b$=$N$h$&$K;W$$$^$9!#e(B
e$B:G8e$N$,HyL/$J$H$3$m$G$9$,!"$3$&$$$&J#;($J$N$O%V%m%C%/M?$($?e(B
e$B>l9g$KG$$;$k!"$H$$$&$3$H$G$$$$$s$8$c$J$$$+$H$b;W$$$^$9!#e(B

| e$B$C$H!";W$C$?$N$G$9$,!"%P%$%[email protected]$J>l9g$HJQ49$G$-$J$$J8;z$N>l9g$GOCe(B
| e$B$,0c$&$h$&$J5$$,$A$i$j!#$b$&[email protected]}$,I,MW$+$b!#e(Bmb2mb e$B$C$F0EL[$Ke(B
| mb.valid? -> mb2wc -> wc2mb e$B$7$F$k$N$G!"$I$NCJ3,$G;`[email protected]$+$K$h$C$FOC$,JQe(B
| e$B$o$k$s$G$9$h$M!#e(B

e$B%P%$%[email protected]$J>l9ge(B(e$B$D$^$jF~NO85J8;zNs$,[email protected]$JJB$S$N>l9ge(B)
e$B$O!"$=$l0J9_$b?.MQ$G$-$J$$$N$G!";XDj$K$+$+$o$i$:%(%i!<$K$9$ke(B
e$B$7$+$J$$$H;W$$$^$9!#e(B
e$B%V%m%C%/$rM?$($?>l9g$O!"!V$=$l0J9_!W$r%W%m%0%i%^$NCN<1$G$J$se(B
e$B$H$+$G$-$k$+$b$7$l$J$$$N$G!"$=$N>l9g$O$^$"JLES!#e(B

| > e$BJQ49<:GT;~BP1~J}K!$H$$$&0z?t$,$"$k$H$$$$$H$$$&$N$O!“e(BString#encode
| > e$B<+BN$,$=$&$$$&J}8~$K$J$k$O$:$J$N$G!”$H$$$&[email protected]$1$G$9!#e(B
| >
| > e$B$H$$$o$o$1$G!“La$jCM$Oe(BVALUE(String)e$B$G$$$$$G$9$7!”<:GT$Oe(Bnile$B$Ge(B
| > e$B65$($F$/$l$l$P$b$&==J,$G!“[email protected]&$O<:GT$7$F$?$i8e$O;`$L$J$je(B
| > e$B2?$J$j$9$l$P$$$$$d$H;W$C$F$$$?$N$G<:GT$7$?$H$3$m$+$i:F3+$H$+e(B
| > e$B$OA4A39M$($F$$$^$;$s$G$7$?!#e(B
|
| e$B$?$V$s!”!V2?$J$j$9$k!W$?$a$K:F3+$,I,MW$8$c$J$$$+$J!<$H;W$$$^$9!"$?$V$s!#e(B

e$B$"!"$3$3$G$$$&!V2?$J$j!W$O!"5$$K$;$:J8;zNs<N$F$k$H$+$=$&$$$&e(B
e$B%l%Y%k$N=hM}$rA[Dj$7$F$$$^$7$?!#e(B

| > [email protected]@%$5$s$N0F$O!“e(BString#encodee$B$N%V%m%C%/0z?t$D$-HG$KBP1~$7$?e(BAPI
| > e$B$H$$$&$3$H$K$J$k$+$H;W$&$N$G$9$,!”$3$l$O$^$"$3$l$H$7$F!";d$,e(B
| > e$BM_$7$+$C$?$N$O$b$C$H<j7Z$K8F$Y$k%7%s%W%k$JE[$G$9!"$O$$!#e(B
|
| e$B%V%m%C%/0z?tIU$-HG$re(B e$B=c?h$Je(B C e$B$N%l%$%d!<$G$d$k$H$3$&$J$C$F$7$^$&$H$$$&Nce(B
| e$B$G$9$+$M!#<:GT$7$?$iL5;k$+$=$N$^$^;`$s$G$7$^$&$J$iBgI}$K%7%s%W%k$K$J$k$Ge(B
| e$B$7$g$&!#e(B
|
| [email protected]!"<:GT$r5_$$&$H$9$k$H:F3+$dCfCG>l=j$N>pJs$,I,MW$K$J$C$F!":F3+2DG=$Ke(B
| e$B$9$k$H>uBV$,I,MW$K$J$k$H$$$&$h$&$K>pJs$,A}$($F$$$/$N$G!"$H$j$^$o$7$OB?>/e(B
| e$B3Z$K$J$C$F$b!"K<AE
$KI,MW$J>pJs$O$"$^$jJQ$o$i$J$$$+$J$!$H5$$b$7$^$9!#e(B

e$B$O$$!#e(B
e$B<:GT$r5_$&$?$a$K$O>:Y$J>pJs$,I,MW$G!"$=$&$$$&$N$,M_$7$$?M$Oe(B
e$B$b$A$m$s$$$k$G$7$g$&$+$i!"@[email protected]%$5$s0F%l%Y%k$Ne(BAPIe$B$b$*$=$i$/I,MWe(B
[email protected]$m$&$H;W$&$o$1$G$9$,!";d$,M_$7$$$N$O$b$C$H%F%-%H!<$JE[e(B
[email protected]$C$?!"$H$$$&$3$H$G$9!#e(B

e$B$=$l$G$O!#e(B

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs