Win32/registry wtime

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

win32/registry.rbe$B$Ne(Bwtimee$B$GICL$K~$,@Z$j<N$F$i$l$F$?$N$Ge(B
e$B%Q%C%A$r=q$$$F$_$^$7$?!#e(B
usece$B$G$b@:EYB-$j$J$$$N$Ge(Bwtimee$B"*e(BTimee$B"*e(Bwtimee$B$,$&$^$/$$$-$^$;$s$,e(B
e$BICC10L$h$j$+$O%^%7$@$H;W$$$^$9!#e(B

e$BJL7o$K$J$j$^$9$,%f%K%3!<%IBP1~$7$F$J$$$+$iJ8;z2=$1$,$?$^$K5/$-$^$9$M!#e(B

e$B%l%8%9%H%j$r%@%s%W$9$k%W%m%0%i%`$rAH$b$&$H$7$FVH$j$^$7$?e(B^^;

Index: registry.rb

— registry.rb (revision 12112)
+++ registry.rb (working copy)
@@ -511,11 +511,11 @@
end

 def self.wtime2time(wtime)
  •  Time.at((wtime - 116444736000000000) / 10000000)
    
  •  Time.at((wtime - 116444736000000000).quo(10000000))
    

    end

    def self.time2wtime(time)

  •  time.to_i * 10000000 + 116444736000000000
    
  •  time.to_i * 10000000 + time.usec *10 + 116444736000000000
    

    end

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

In message “Re: [ruby-dev:30655] win32/registry wtime”
on Wed, 21 Mar 2007 01:40:05 +0900, [email protected] writes:

|# e$BJL7o$K$J$j$^$9$,%f%K%3!<%IBP1~$7$F$J$$$+$iJ8;z2=$1$,$?$^$K5/$-$^$9$M!#e(B
|# e$B%l%8%9%H%j$r%@%s%W$9$k%W%m%0%i%`$rAH$b$&$H$7$FVH$j$^$7$?e(B^^;

e$B$^!“e(BUnicodee$BBP1~$7$F$$$k$H$&$?$C$F$k8@8l$G$bJ8;z2=$1$OH/@8$7e(B
e$B$F$k$$?$$$G$9$7$M!#$G!":#2s$O$I$N$h$&$J7P0^$GJ8;z2=$1$7$^$7e(B
e$B$?$+!#F1$8$h$&$JLdBj$,:#8eH/@8$7$J$$$h$&$J;EAH$
$r9M$($k%R%se(B
e$B%H$K$7$?$$$N$G!”$<$R65$($F$/$@$5$$!#e(B

win32/registry.rb e$B$r=q$$$?e(B Tietew e$B$G$9!#e(B

On Wed, 21 Mar 2007 19:08:04 +0900
In article [email protected]
[[ruby-dev:30658] Unicodee$BBP1~$HJ8;z2=$1e(B(Re: win32/registry wtime)]
Yukihiro M. [email protected] wrote:

|# e$BJL7o$K$J$j$^$9$,%f%K%3!<%IBP1~$7$F$J$$$+$iJ8;z2=$1$,$?$^$K5/$-$^$9$M!#e(B
|# e$B%l%8%9%H%j$r%@%s%W$9$k%W%m%0%i%`$rAH$b$&$H$7$FVH$j$^$7$?e(B^^;

e$B$^!“e(BUnicodee$BBP1~$7$F$$$k$H$&$?$C$F$k8@8l$G$bJ8;z2=$1$OH/@8$7e(B
e$B$F$k$$?$$$G$9$7$M!#$G!":#2s$O$I$N$h$&$J7P0^$GJ8;z2=$1$7$^$7e(B
e$B$?$+!#F1$8$h$&$JLdBj$,:#8eH/@8$7$J$$$h$&$J;EAH$
$r9M$($k%R%se(B
e$B%H$K$7$?$$$N$G!”$<$R65$($F$/$@$5$$!#e(B

e$B:#$Ne(B win32/registry.rb
e$B$Oe(BANSIe$B$Ne(BAPIe$B$r8F$s$G$$$k$N$G!"e(B
e$B%+%l%s%H%m%1!<%kHO0O30$NJ8;z$,e(B ?
e$B$KJQ2=$7$F$7$^$&$N$@$H;W$$$^$9!#e(B

e$B8F$Ve(BAPIe$B$re(B Unicode
e$B$N$b$N$K$9$l$P!“$d$j$H$j$9$kJ8;zNs$r$Oe(B UTF-16
e$B$J$N$G!”$"$H$OJQ4985!&@h$NJ8;z%(%s%3!<%G%#%s%0$5$(7h$^$l$PJQ49$Oe(B
e$B$=$l$[$I6l$G$b$J$$$+$H!#e(B

e$B$"!<$G$be(B mswin32 e$B$K$OI8=`$Ge(B iconv.so
e$B$H$+IU$$$F$J$$$s$G$9$h$M!#e(B
e$B$I$&$7$?$i$$$$$s$@$m$&!#$X$?$Je(B libiconv e$B;H$&$He(B Windows-31J
e$B$,;He(B
e$B$($J$$$7!D!De(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:30659] Re: Unicodee$BBP1~$HJ8;z2=$1e(B(Re:
win32/registry wtime)”
on Mar.21,2007 20:07:55, [email protected] wrote:
| e$B8F$Ve(BAPIe$B$re(B Unicode e$B$N$b$N$K$9$l$P!“$d$j$H$j$9$kJ8;zNs$r$Oe(B UTF-16
| e$B$J$N$G!”$“$H$OJQ4985!&@h$NJ8;z%(%s%3!<%G%#%s%0$5$(7h$^$l$PJQ49$Oe(B
| e$B$=$l$[$I6l$G$b$J$$$+$H!#e(B
|
| e$B$”!<$G$be(B mswin32 e$B$K$OI8=`$Ge(B iconv.so e$B$H$+IU$$$F$J$$$s$G$9$h$M!#e(B
| e$B$I$&$7$?$i$$$$$s$@$m$&!#$X$?$Je(B libiconv e$B;H$&$He(B Windows-31J e$B$,;He(B
| e$B$($J$$$7!D!De(B

win32/registrye$B$,FbIt$GJQ49$^$G9T$&$N$O$I$&$J$s$+$J!<!"$H$$$&e(B
e$B5$$,$7$^$9!#e(B
e$B$I$C$A$K$7$me(BUTF-16e$B$+$iLa$9$H$-$K2=$1$k$+Nc305/$-$k$+$J$o$1$Ge(B
e$B$9$7!#e(B

e$B$I$C$A$+$H$$$&$H!“I,MW$G$”$k$N$J$i$Pe(BUnicodee$B$Je(BAPIe$B$r8F$V%$%s%?e(B
e$B!<%U%‘!<%9$bMQ0U$7$F!“A08e$N=hM}$O8F$s$@?M$K$^$+$;$?J}$,$$$$e(B
e$B$N$+$J$”!“$H;W$$$^$9!#e(B
e$B>-Mhe(Bm17ne$B$,F~$C$?$i!”$I$C$A$N%$%s%?!<%U%’!<%9$r;H$&$+$/$i$$$Oe(B
e$B<+F0H=Dj$G$-$k$h$&$K$b$J$k$G$7$g$&!#e(B

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

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

e$B<+F0$GJQ49$9$Y$-$+$I$&$+$O!J$&!K$5$s!"@.@%$5$s$HF1$80U8+$G$9!#e(B
e$B$G!"e(B

07/03/21 e$B$Ke(B Tietew[email protected]
e$B$5$s$O=q$-$^$7$?e(B:

e$B8F$Ve(BAPIe$B$re(B Unicode e$B$N$b$N$K$9$l$P!“$d$j$H$j$9$kJ8;zNs$r$Oe(B UTF-16
e$B$J$N$G!”$"$H$OJQ4985!&@h$NJ8;z%(%s%3!<%G%#%s%0$5$(7h$^$l$PJQ49$Oe(B
e$B$=$l$[$I6l$G$b$J$$$+$H!#e(B

e$B$"!<$G$be(B mswin32 e$B$K$OI8=`$Ge(B iconv.so e$B$H$+IU$$$F$J$$$s$G$9$h$M!#e(B
e$B$I$&$7$?$i$$$$$s$@$m$&!#$X$?$Je(B libiconv e$B;H$&$He(B Windows-31J e$B$,;He(B
e$B$($J$$$7!D!De(B

e$B$3$l$J$s$G$9$1$I!“e(BWin32e$B0J30$N%W%i%C%H%U%)!<%`>e$GF0:n$5$;$k$3$H$re(B
e$B9MN8$9$kI,MW$O$3$N3HD%%i%$%V%i%j$K$”$k$N$G$7$g$&$+e(B?

Win32e$B$KJD$8$F$$$k$N$J$i!“e(BWin32APIe$B$r;H$C$F%l%,%7!<%3!<%I”*e(B
UTF-16(or UCS-2)e$B$XJQ49$7$F$d$l$P!“e(Biconve$B$,$”$k$+$I$&$+$re(B
e$B5$$K$7$J$$$G$$$$$G$9$7!"JQ49I=$be(BlMSe$BMM$4<+?H$N$b$N$J$N$Ge(B
e$B!Ve(B(e$B3HD%ItJ,$D$-$Ne(B)e$B$$$o$f$ke(BShiftJISe$B!W$H$NAj8_JQ49$K$D$$$F$be(B
e$B;W$$G:$^$:$K$9$`$N$G$O$J$$$+$H;W$&$N$G$9$,!#e(B

e$B$J$K$+4*0c$$$7$F$$$?$i$4$a$s$J$5$$!#e(B

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

e$B$-$`$i$3$&$$$Ae(B wrote:

e$B$"!<$G$be(B mswin32 e$B$K$OI8=$Ge(B iconv.so e$B$H$+IU$$$F$J$$$s$G$9$h$M!#e(B e$B;W$$G:$^$:$K$9$$N$G$O$J$$$+$H;W$&$N$G$9$,!#e(B

e$B$J$K$+4*0c$$$7$F$$$?$i$4$a$s$J$5$$!#e(B

e$B$o$6$o$6e(BANSIe$B$+$ie(BUnicodee$B$KJQ49$7$J$/$F$b!"e(B
e$B:G=i$+$ie(BANSIe$BHG$Ne(BAPIe$B$r8F$Y$P$$$$$N$G$O$J$$$G$7$g$&$+!#e(B

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

07/03/22 e$B$Ke(B NARUSE, Yui[email protected]
e$B$5$s$O=q$-$^$7$?e(B:

e$B$o$6$o$6e(BANSIe$B$+$ie(BUnicodee$B$KJQ49$7$J$/$F$b!"e(B
e$B:G=i$+$ie(BANSIe$BHG$Ne(BAPIe$B$r8F$Y$P$$$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B8=>u$Ge(BAe$BHG$r8F$S=P$7$F$$$F!"7k2Le(Bmoonwolfe$B$5$s$N$$$&J8;z2=$1$,e(B
e$B5/$-$F$$$k$H;W$C$F$$$?$N$G$9$,0c$$$^$9e(B?

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

Tietew wrote:

e$B:#$Ne(B win32/registry.rb e$B$Oe(BANSIe$B$Ne(BAPIe$B$r8F$s$G$$$k$N$G!"e(B
e$B%+%l%s%H%m%1!<%kHO0O30$NJ8;z$,e(B ? e$B$KJQ2=$7$F$7$^$&$N$@$H;W$$$^$9!#e(B

e$B8F$Ve(BAPIe$B$re(B Unicode e$B$N$b$N$K$9$l$P!"$d$j$H$j$9$kJ8;zNs$r$Oe(B UTF-16
e$B$J$N$G!"$"$H$OJQ4985!&@h$NJ8;z%(%s%3!<%G%#%s%0$5$(7h$^$l$PJQ49$Oe(B
e$B$=$l$[$I6l$G$b$J$$$+$H!#e(B

e$B$J$+$`$i$5$s$HF10U8+$G!“e(B
e$BJQ49$;$:$K$=$N$^$^e(BUTF-16e$B$rJV$9%a%=%C%I$@$1$”$l$P$h$$$H;W$$$^$9!#e(B

e$BDL>o$5$i$KJQ49$9$k%1!<%9$Oe(BANSIe$B$X$+e(BUTF-8e$B$X$+$/$i$$$@$H;W$$$^$9$,!"e(B
ANSIe$B$O$b$H$+$ie(BANSIe$BHG$r8F$Y$P$$$$$G$9$7!"e(B
UTF-8e$B$X$J$ie(Bstr.unpack(‘n*’).pack(‘U*’)e$B$GJQ49$G$-$^$9$+$i!#e(B

e$B%5%m%2!<%H%Z%"$O$3$l$@$H$@$a$G$9$1$Ie(B

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

e$B$-$`$i$3$&$$$Ae(B wrote:

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

07/03/22 e$B$Ke(B NARUSE, Yui[email protected] e$B$5$s$O=q$-$^$7$?e(B:

e$B$o$6$o$6e(BANSIe$B$+$ie(BUnicodee$B$KJQ49$7$J$/$F$b!"e(B
e$B:G=i$+$ie(BANSIe$BHG$Ne(BAPIe$B$r8F$Y$P$$$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B8=>u$Ge(BAe$BHG$r8F$S=P$7$F$$$F!"7k2Le(Bmoonwolfe$B$5$s$N$$$&J8;z2=$1$,e(B
e$B5/$-$F$$$k$H;W$C$F$$$?$N$G$9$,0c$$$^$9e(B?

e$B$o$?$7$b$=$l$G@5$7$$$H;W$C$F$$$^$9$,!"e(B
e$B$=$NJ8;z2=$1$N5/$-$k%1!<%9$G$O!"L@<(E*$KJQ49$7$F$b2=$1$k$+$H!#e(B
e$B%U%)!<%k%P%C%/=hM}$,$G$-$k$H$$$&DxEY$NMxE@$K$J$k$+$H;W$$$^$9!#e(B

MultiByteToWideChar e$B$He(B WideCharToMultiByte e$B$re(B Ruby
e$B$+$iC!$1$ke(B
e$B%i%$%V%i%j$NDs0F$J$N$G$7$?$i!“$=$l$J$j$K0U5A$O$”$k$+$b$7$l$^$;$s!#e(B

On Wed, 21 Mar 2007 22:11:11 +0900
In article [email protected]
[[ruby-dev:30661] Re: Unicodee$BBP1~$HJ8;z2=$1e(B(Re: win32/registry
wtime)]
“NARUSE, Yui” [email protected] wrote:

e$B$J$+$`$i$5$s$HF10U8+$G!“e(B
e$BJQ49$;$:$K$=$N$^$^e(BUTF-16e$B$rJV$9%a%=%C%I$@$1$”$l$P$h$$$H;W$$$^$9!#e(B

e$B$=$&$G$9$M!#$"$^$jJQ$J$3$H$O9M$($J$$J}$,$$$$$G$9$M!#e(B

UTF-8e$B$X$J$ie(Bstr.unpack(‘n*’).pack(‘U*’)e$B$GJQ49$G$-$^$9$+$i!#e(B

Win32e$B$O%j%H%k%(%s%G%#%"%s$J$N$G!"e(Bv* e$B$@$H;W$$$^$9!#e(B

MoonWolfです。

Yukihiro M. [email protected]:

|# 別件になりますがユニコード対応してないから文字化けがたまに起きますね。
|# レジストリをダンプするプログラムを組もうとして嵌りました^^;

ま、Unicode対応しているとうたってる言語でも文字化けは発生し
てるみたいですしね。で、今回はどのような経緯で文字化けしまし
たか。同じような問題が今後発生しないような仕組みを考えるヒン
トにしたいので、ぜひ教えてください。

Windowsのレジストリ内部は全てユニコードで記録されています。
現状のwin32/registryで呼び出しているANSI版のAPIでは
ANSI(CP932)書き込み→内部(UCS2)→ANSI(CP932)読み込みという風になります。
CP932しか使わないのであれば全く問題はありません。

今回発生した文字化けはレジストリのバックアップ/リストア処理で起きました。
レジストリを読み出す段階でCP932に無い文字は’?'に置き換えられてしまいます。
そのため、読み込んだ値をそのまま書き戻すということができませんでした。

ã¨ã‚Šã‚ãˆãšæ˜Žç¤ºçš„ã«ãƒ¦ãƒ‹ã‚³ãƒ¼ãƒ‰ã§èª­ã¿æ›¸ãã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’è¿½åŠ ã—ã¦ã¿ã¾ã—ãŸã€‚
readのUTF-8版としてread_utf8、writeにはwrite_utf8ã¨ã„ã†ã®ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™ã€‚