kumaryu日記
2010-04-13
_ [Ruby] IronRubyとSilverlightでは日本語がまともにつかえない件の続き
昨日書いてたやつのパッチ貼っておきます。
Silverlight版で$KCODE='u'するだけで例外が上がるのに対処するパッチ。 --- ironruby-ironruby-0fe6798.orig/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyEncoding.cs 2010-04-01 15:58:09.000000000 +0900 +++ ironruby-ironruby-0fe6798/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyEncoding.cs 2010-04-13 08:29:22.000000000 +0900 @@ -210,7 +210,7 @@ case "ASCII": case "ASCII-8BIT": return BinaryEncoding.Instance; #if SILVERLIGHT - case "UTF-8": return Encoding.UTF8; + case "UTF8": return Encoding.UTF8; default: throw new ArgumentException(String.Format("Unknown encoding: '{0}'", name)); #else // Mono doesn't recognize 'SJIS' encoding name: @@ -472,6 +472,8 @@ ContractUtils.RequiresNotNull(encoding, "encoding"); if (encoding == BinaryEncoding.Instance) { return Binary; + } else if (encoding is KCoding && ((KCoding)encoding).KCodeName == "UTF8") { + return UTF8; } else if (encoding.ToString() == Encoding.UTF8.ToString()) { return UTF8; } else { @@ -498,6 +500,10 @@ return CodePageUTF8; } + if (encoding is KCoding && ((KCoding)encoding).KCodeName == "UTF8") { + return CodePageUTF8; + } + throw Assert.Unreachable; }
KCodingの扱いが微妙すぎるので適当に対処した。
起動オプションにKCODE指定が無い場合、-Kuを指定したことにしちゃうパッチ。 --- ironruby-ironruby-0fe6798.orig/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOptions.cs 2010-04-01 15:58:09.000000000 +0900 +++ ironruby-ironruby-0fe6798/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOptions.cs 2010-04-11 22:59:09.000000000 +0900 @@ -129,7 +129,7 @@ _compatibility = GetCompatibility(options, "Compatibility", RubyCompatibility.Default); if (_compatibility < RubyCompatibility.Ruby19) { - _kcode = GetKCoding(options, "KCode", null); + _kcode = GetKCoding(options, "KCode", RubyEncoding.UTF8); } }
前者はちょっと対応がひどすぎるんだが、まあ動かすだけならこんなもんでしょうということで。
いや、対応はどっちも適当すぎるか。
今日IronRuby 1.0が出てたけどソース的には今月の頭から変わってないようなので上記のパッチはそのまま適用可能です。うれしいかどうかはともかくとして。
Silverlight4は明日か。さてBindingがどうなってるか…は諦めてるのでともかくとして、俺のExpression Subscriptionはどうなってしまうんでしょう。VisualStudio2010は…。