Ruby M17N $B2q5D$N5D;vO?(B

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

Ruby M17N
e$B2q5D$re(B2008e$BG/e(B2e$B7ne(B15e$BF|$K9T$C$?$N$G$9$,!"$=$N%m%0$rE>:$7$F$*$-$^$9!#e(B

== cgi.rb e$B8e7Q$N8xJg$K$D$$$Fe(B

e$B>r7o$O0J2<$NDL$je(B

  • e$BL>A0e(B e$B$Oe(B cgi.rb e$B0J30$G$"$k$3$He(B
  • MVCe$B$NJ,N%$r9T$C$F$$$k$3$He(B

== String#gsub(regexp, hash)

String#gsub(regexp, {“ä”=>"\u00C4", …}) e$B$H$$$&I=5-$r9T$$$?$$e(B
e$B"*:NMQe(B

== replicae$B$N=PE5Ey$N>pJs$re(B

e$B"*=q$/e(B

== CP949e$B$He(BGBKe$B$N0c$$e(B

e$B"*e(BCP949e$B$OJ,N%e(B

== e$B6uJ8;ze(B e$B$He(B UTF-16 e$B$r7k9g$9$k>l9g$K$D$$$Fe(B

e$B6uJ8;z$Oe(B ASCII Compatible
e$B$G$J$$J8;zNs$H$b7k9g2DG=$K$7$F$O$I$&$+e(B
e$B"*:NMQe(B

== String#lengthe$B$de(BString#ate$B$,CY$$e(B

search_nonasciie$B$r;H$C$F9bB.2=e(B
VALIDe$B$Je(BUTF-8e$B$N>l9g$O$5$i$K9bB.2=e(B

== String#getbyte, String#setbyte

e$B"*:NMQe(B

== Indexer

e$B"*J]N1e(B

== inspect e$B$K$D$$$Fe(B

e$B0J2<$NJ}8~$G8!F$e(B

  • obj.inspect_acumulate(enc) e$B$r?7@_e(B

== strftime e$B$NJ}8~@-$K$D$$$Fe(B
strftime e$B$Oe(B locale
e$BHs0MB8!"0MB8$N$b$N$,I,MW$=$&$J$i$PJL$KDI2C$9$ke(B

== require_relative e$B$NF3F~$K$D$$$Fe(B
require_relative e$B$r8F$s$@%U%!%$%k$+$i$NAjBP%Q%9$Ge(B require
e$B$9$k!#e(B
e$B"*:NMQe(B

== IO.copy_stream
IO.copy_stream(filename, filename) e$B$de(B IO.copy_stream(stream,
stream) e$BEy$G!"e(B
e$B%U%!%$%k$d%9%H%j!<%$r%3%T!<$9$k!#e(B e$B$J$*!"%U%!%$%kL>$rM?$($i$l$?>l9g$O%7%9%F%%3!<%k$r8F$V$?$a!“e(B
Rubye$B$OJL$N$3$H$r$G$-$k!#e(B
e$B”*L>A0$K$D$$$FMW8!F$e(B

== Hash#compare_by_identitye$B$,HyL/$J7oe(B
Hash#compared_by(:equal?, :obj_id)e$B$KJQ99$7$?$$e(B
e$B"*:NMQe(B
e$B"*e(BHash#identifed_bye$B$NJ}$,$$$$$+$be(B[ruby-dev:33817]

== Unicode Normalization

APIe$B$O0J2<$"$?$j!#e(B

  • String#encode(“utf-8 nfc”)
  • String#normalize(“nfc”)
  • Encoding::UTF_8.nfc(str)

open(fn, “r:utf-8”, …)
e$B$"$?$j$G!"@55,2=$7$J$,$iFI$_9~$`Ey$N=hM}$r$7$?e(B
e$B$$$N$G!"e(B
e$B$=$l8~$1$N5-K!$b8!F$e(B

e$B@>;3OB9-$G$9!#e(B

At Sun, 17 Feb 2008 18:00:54 +0900,
NARUSE, Yui wrote:

== String#gsub(regexp, hash)

String#gsub(regexp, {“ä”=>"\u00C4", …}) e$B$H$$$&I=5-$r9T$$$?$$e(B
e$B"*:NMQe(B

CGI::escapeHTML e$B$G$3$l$r;H$&$h$&$K$9$k$HNI$$$N$G$O$J$$$G$7$g$&$+e(B?

Index: lib/cgi.rb

— lib/cgi.rb (revision 15522)
+++ lib/cgi.rb (working copy)
@@ -360,7 +360,7 @@

CGI::escapeHTML('Usage: foo “bar” ')

# => “Usage: foo “bar” <baz>”

def CGI::escapeHTML(string)

  • string.gsub(/&/, ‘&’).gsub(/"/, ‘"’).gsub(/>/,
    ‘>’).gsub(/</, ‘<’)
  • string.gsub(/[&"<>]/, {’&’=>’&’, ‘"’=>’"’, ‘<’=>’<’,
    ‘>’=>’>’})
    end

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

In message “Re: [ruby-dev:33828] Re: Ruby M17N e$B2q5D$N5D;vO?e(B”
on Sun, 17 Feb 2008 20:11:09 +0900, Kazuhiro NISHIYAMA
[email protected] writes:

|> String#gsub(regexp, {“ä”=>“\u00C4”, …}) e$B$H$$$&I=5-$r9T$$$?$$e(B
|> e$B"*:NMQe(B
|
|CGI::escapeHTML e$B$G$3$l$r;H$&$h$&$K$9$k$HNI$$$N$G$O$J$$$G$7$g$&$+e(B?

e$B%3%_%C%H$7$F$/$@$5$$!#e(B

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

In message “Re: [ruby-dev:33828] Re: Ruby M17N e$B2q5D$N5D;vO?e(B”
on Sun, 17 Feb 2008 20:11:09 +0900, Kazuhiro NISHIYAMA [email protected] writes:

|> String#gsub(regexp, {“ä”=>“\u00C4”, …}) e$B$H$$$&I=5-$r9T$$$?$$e(B
|> e$B"*:NMQe(B
|
|CGI::escapeHTML e$B$G$3$l$r;H$&$h$&$K$9$k$HNI$$$N$G$O$J$$$G$7$g$&$+e(B?

e$B%3%_%C%H$7$F$/$@$5$$!#e(B

e$B!!e(Bhash e$B$O;vA0$K:n$C$F$*$-$^$7$g$&$h!%e(B

e$BLZB<$G$9!#e(B

On Sun, 17 Feb 2008 18:00:54 +0900
“NARUSE, Yui” [email protected] wrote:

Ruby M17N e$B2q5D$re(B2008e$BG/e(B2e$B7ne(B15e$BF|$K9T$C$?$N$G$9$,!"$=$N%m%0$rE>:$7$F$*$-$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

e$B6uJ8;z$Oe(B ASCII Compatible e$B$G$J$$J8;zNs$H$b7k9g2DG=$K$7$F$O$I$&$+e(B

strftime e$B$Oe(B locale e$BHs0MB8!“0MB8$N$b$N$,I,MW$=$&$J$i$PJL$KDI2C$9$ke(B
e$B”*L>A0$K$D$$$FMW8!F$e(B

  • String#normalize(“nfc”)
  • Encoding::UTF_8.nfc(str)

open(fn, “r:utf-8”, …) e$B$“$?$j$G!”@55,2=$7$J$,$iFI$_9~$`Ey$N=hM}$r$7$?e(B
e$B$$$N$G!"e(B
e$B$=$l8~$1$N5-K!$b8!F$e(B

e$B$3$l$i$N8!F$%“%$%F%`$N>pJs$r1Q8l$GN.$7$?$j$O$7$J$$$N$G$7$g$&$+e(B?
#e$B$*A0$,$d$l!”$H$$$&$3$H$J$iEXNO$7$^$9$,!#e(B

e$B!V1Q8l$G$b!W$H8@$o$l$k$H!";22C<T$N0l?M$H$7$F@UG$$re(B
e$B46$8$5$;$i$l$F$7$^$$$^$7$?e(B ;-).

e$B$&$^$/9T$1$P:#F|$d$j$^$9!#e(B e$B59$7$/$*4j$$$7$^$9!#e(B Martin.

At 16:49 08/02/18, KIMURA Koichi wrote:

== require_relative e$B$NF3F~$K$D$$$Fe(B
== Hash#compare_by_identitye$B$,HyL/$J7oe(B

open(fn, “r:utf-8”, …) e$B$“$?$j$G!”@55,2=$7$J$,$iFI$_9~$`Ey$N=hM}$r$7$?e(B
e$B$$$N$G!"e(B
e$B$=$l8~$1$N5-K!$b8!F$e(B

e$B$3$l$i$N8!F$%“%$%F%`$N>pJs$r1Q8l$GN.$7$?$j$O$7$J$$$N$G$7$g$&$+e(B?
#e$B$*A0$,$d$l!”$H$$$&$3$H$J$iEXNO$7$^$9$,!#e(B


e$BLZB<9@0le(B

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

e$BLZB<$G$9!#e(B

On Mon, 18 Feb 2008 17:34:13 +0900
Martin D. [email protected] wrote:

e$B!V1Q8l$G$b!W$H8@$o$l$k$H!";22C<T$N0l?M$H$7$F@UG$$re(B
e$B46$8$5$;$i$l$F$7$^$$$^$7$?e(B ;-).

e$B$9$_$^$;$s!#$“$^$j%3%”%A!<%`$N%a%s%P!<$NJ}!9$K=E2Y$rGXIi$o$;$k$D$b$j$Oe(B
e$B$J$$$N$G$9$,!“<BAu$5$l$k$^$GF|K\8l$G$O>pJs$rM}2r$G$-$J$$?M$?$A$,CN$k$3e(B
e$B$H$,$G$-$J$$$N$O$A$g$C$HLdBj$”$j$G$O$J$$$+$H;W$$$^$7$?$N$G!#e(B

e$B$&$^$/9T$1$P:#F|$d$j$^$9!#e(B e$B59$7$/$*4j$$$7$^$9!#e(B Martin.

e$B$*<j?t$+$1$^$7$?!#e(B
e$B$"$j$,$H$&$4$6$$$^$9!#e(B

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

At 16:49 08/02/18, KIMURA Koichi wrote:

e$B$3$l$i$N8!F$%"%$%F%`$N>pJs$r1Q8l$GN.$7$?$j$O$7$J$$$N$G$7$g$&$+e(B?
#e$B$*A0$,$d$l!"$H$$$&$3$H$J$iEXNO$7$^$9$,!#e(B

e$B3N$+$K$=$&$G$9$M!"$4;XE&$4$b$C$H$b!#e(B

Martin D. wrote:

e$B!V1Q8l$G$b!W$H8@$o$l$k$H!";22C<T$N0l?M$H$7$F@UG$$re(B
e$B46$8$5$;$i$l$F$7$^$$$^$7$?e(B ;-).

e$B$&$^$/9T$1$P:#F|$d$j$^$9!#e(B e$B59$7$/$*4j$$$7$^$9!#e(B Martin.

e$B=u$+$j$^$9!"$h$m$7$/$*4j$$$7$^$9!#e(B