Project

General

Profile

Feature #2835

String#encodeに置換文字列のみを与えたら未定義向けとみなす

Added by naruse (Yui NARUSE) over 9 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:40554]

Description

=begin
Ruby 1.9 もおおむね完成してからそろそろ 3 年が経つのですが、
気付いた事として、String#encode(to, from, opt) の opt に :replace を指定した時は、
ほとんどの場合 :undef => :replace も指定するという事があります。

よくよく考えれば、不正なバイト列を続行したいという事は少ないし、推奨されず、
ゆえに置換文字列を指定する場合はたいてい未定義文字を置き換えたい場合な訳です。

以下のパッチは、:invalid => :replace がしているされている場合以外に、
(つまり、不正なバイト列向けに置換文字列が指定されている可能性がある場合以外)
置換文字列を指定している場合、:undef => :replace とみなします。

想定ケースでは :undef => :replace と書かなくてすむので楽な上に、
楽な方法に誘導する事で、よく考えずに {:invalid => :replace, :undef => :replace}
と書いてしまう人を減らせるので一石二鳥だと思うのですが、いかがでしょう。

diff --git a/transcode.c b/transcode.c
index d511547..9d6a886 100644
--- a/transcode.c
+++ b/transcode.c
@@ -2394,6 +2394,11 @@ econv_opts(VALUE opt)
rb_raise(rb_eArgError, "unknown value for undefined character option");
}

  • v = rb_hash_aref(opt, sym_replace);
  • if (!NIL_P(v) && !(ecflags & ECONV_INVALID_REPLACE)) {
  • ecflags |= ECONV_UNDEF_REPLACE;
  • } + v = rb_hash_aref(opt, sym_xml); if (!NIL_P(v)) { if (v==sym_text) { =end

History

#1

Updated by matz (Yukihiro Matsumoto) over 9 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:40554] [Feature #2835] String#encodeに置換文字列のみを与えたら未定義向けとみなす"
on Wed, 3 Mar 2010 21:54:55 +0900, Yui NARUSE redmine@ruby-lang.org writes:

|以下のパッチは、:invalid => :replace がしているされている場合以外に、
|(つまり、不正なバイト列向けに置換文字列が指定されている可能性がある場合以外)
|置換文字列を指定している場合、:undef => :replace とみなします。
|
|想定ケースでは :undef => :replace と書かなくてすむので楽な上に、
|楽な方法に誘導する事で、よく考えずに {:invalid => :replace, :undef => :replace}
|と書いてしまう人を減らせるので一石二鳥だと思うのですが、いかがでしょう。

いいんじゃないでしょうか。

=end

#2

Updated by naruse (Yui NARUSE) over 9 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r26823.
Yui, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Also available in: Atom PDF