[#44909] VRDdeClientについて — Toshiyasu Soejima <clev@...2.so-net.ne.jp>

17 messages 2008/05/11

[#44936] yamlとencoding — "Yutaka Kanemoto" <kinpoco@...>

金本と申します。

16 messages 2008/05/14

[ruby-list:44952] Re: yamlとencoding

From: "NARUSE, Yui" <naruse@...>
Date: 2008-05-17 07:43:22 UTC
List: ruby-list #44952
成瀬です。

> この例では encoding は UTF-8 になるのが正しい動作のように感じます。
> ただ、UTF-16 の場合や EUC-JP の場合にどうするのが妥当なのかわからないので、
> その辺をちゃんと勉強しておきます。

UTF-16 は Syck が非対応で、EUC-JP 等は YAML で規定されていないので無視とすると、

--- lib/yaml/rubytypes.rb       (revision 16447)
+++ lib/yaml/rubytypes.rb       (working copy)
@@ -149,6 +149,7 @@ class String
         val = val.unpack("m")[0] if tag == "tag:yaml.org,2002:binary"
         val = { 'str' => val } if String === val
         if Hash === val
+            val['str'].force_encoding("UTF-8") unless tag == "tag:yaml.org,2002:binary"
             s = klass.allocate
             # Thank you, NaHi
             String.instance_method(:initialize).
@@ -184,6 +185,7 @@ class Symbol
     def Symbol.yaml_new( klass, tag, val )
         if String === val
             val = YAML::load( val ) if val =~ /\A(["']).*\1\z/
+            val.force_encoding("UTF-8")
             val.intern
         else
             raise YAML::TypeError, "Invalid Symbol: " + val.inspect
@@ -258,6 +260,7 @@ class Regexp
         end
         if Hash === val
             mods = nil
+            val['regexp'].force_encoding("UTF-8")
             unless val['mods'].to_s.empty?
                 mods = 0x00
                 mods |= Regexp::EXTENDED if val['mods'].include?( 'x' )

他のエンコーディングの文字列も工夫すれば一応保持できるようにできそうですが、
その辺はニーズがあったらで。

-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread