[#37679] [FEATURE:trunk] EncDet again — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

23 messages 2009/01/03

[#37748] $LOAD_PATHとバージョンの運用の関係 — akira yamada / やまだあきら <akira@...>

1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

12 messages 2009/01/09
[#37758] Re: $LOAD_PATHとバージョンの運用の関係 — "NARUSE, Yui" <naruse@...> 2009/01/11

成瀬です。

[ruby-dev:37769] [Bug #981] String#encode() keeps invalid bytes when converting to US-ASCII

From: Yui NARUSE <redmine@...>
Date: 2009-01-15 05:15:03 UTC
List: ruby-dev #37769
チケット #981 が更新されました。 (by Yui NARUSE)

担当者 Akira TanakaからYukihiro Matsumotoに変更

この挙動は String#encode が直接の原因ではなく、Encoding.default_internal 側が原因です。
% ruby19 -E:us-ascii -e'p Encoding.default_internal'
#<Encoding:UTF-8>

enc_set_default_encoding を見ると、
if (def->index == ENCINDEX_US_ASCII)
    def->index = defindex;
と、US-ASCII の場合にデフォルトのエンコーディング (default_internal では UTF-8) がセットされています。
現在の仕様ではこの辺の処理は不要な気がするので、以下の通りとか。

Index: encoding.c
===================================================================
--- encoding.c  (revision 21519)
+++ encoding.c  (working copy)
@@ -1051,7 +1051,7 @@ struct default_encoding {

 static int
 enc_set_default_encoding(struct default_encoding *def, VALUE encoding,
-                        const char *name, int defindex)
+                        const char *name)
 {
     int overridden = Qfalse;
     if (def->index != -2)
@@ -1066,8 +1066,6 @@ enc_set_default_encoding(struct default_encoding *
     }
     else {
        def->index = rb_enc_to_index(rb_to_encoding(encoding));
-       if (def->index == ENCINDEX_US_ASCII)
-           def->index = defindex;
        def->enc = 0;
        enc_alias_internal(name, def->index);
     }
@@ -1118,7 +1116,7 @@ rb_enc_set_default_external(VALUE encoding)
         rb_raise(rb_eArgError, "default external can not be nil");
     }
     enc_set_default_encoding(&default_external, encoding,
-                            "external", ENCINDEX_US_ASCII);
+                            "external");
 }

 /*
@@ -1171,7 +1169,7 @@ void
 rb_enc_set_default_internal(VALUE encoding)
 {
     enc_set_default_encoding(&default_internal, encoding,
-                            "internal", ENCINDEX_UTF_8);
+                            "internal");
 }

 /*


----------------------------------------
http://redmine.ruby-lang.org/issues/show/981

----------------------------------------
http://redmine.ruby-lang.org

In This Thread