Project

General

Profile

Backport #4125

String#encode(:fallback) should accept default handler

Added by ko1 (Koichi Sasada) over 8 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
[ruby-dev:42692]

Description

=begin
 ささだです.

 最近,String#encode は :fallback オプションによって,置換できない文字
を置き換えるための文字(列)のテーブルを渡すことができる,ということを知
りました.

p "\u00A9".encode('sjis', fallback: {"\u00a9" => '(c)'})
#=> '(c)'

 ただ,fallback オプションは Hash のデフォルトハンドラを見てくれないよ
うです.

h = Hash.new{'?'}
h["\u00a9"] = '(c)'
p "\u00A9\u00AA".encode('sjis', fallback: h)
t.rb:3:in encode': U+00AA from UTF-8 to Shift_JIS
(Encoding::UndefinedConversionError)
from t.rb:3:in
'

 マップを知っているものは特定の文字(列)に,知らないものはテキトーに
"?" とかにしたい,という用途はあるんじゃないかと思うので,対応して貰える
といいんじゃないかと思うんですが,どうでしょうか.

 Proc とか,#[] を持っているオブジェクト一般に広げてもいいかもしれませ
んが,その辺はお任せします.

--
// SASADA Koichi at atdot dot net

# すでにパチモンがパッチを持ってるようですが....
=end

History

#1

Updated by matz (Yukihiro Matsumoto) over 8 years ago

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

In message "Re: [ruby-dev:42692] [Feature: trunk] String#encode(:fallback) should accept default handler"
on Mon, 6 Dec 2010 21:04:18 +0900, SASADA Koichi ko1@atdot.net writes:

| ただ,fallback オプションは Hash のデフォルトハンドラを見てくれないよ
|うです.
|
|h = Hash.new{'?'}
|h["\u00a9"] = '(c)'
|p "\u00A9\u00AA".encode('sjis', fallback: h)
|t.rb:3:in encode': U+00AA from UTF-8 to Shift_JIS
|(Encoding::UndefinedConversionError)
| from t.rb:3:in
'
|
|
| マップを知っているものは特定の文字(列)に,知らないものはテキトーに
|"?" とかにしたい,という用途はあるんじゃないかと思うので,対応して貰える
|といいんじゃないかと思うんですが,どうでしょうか.
|
|
| Proc とか,#[] を持っているオブジェクト一般に広げてもいいかもしれませ
|んが,その辺はお任せします.

|# すでにパチモンがパッチを持ってるようですが....

この変更に賛成します。

=end

#2

Updated by naruse (Yui NARUSE) over 8 years ago

=begin
成瀬です。

2010年12月7日12:21 Yukihiro Matsumoto matz@ruby-lang.org:

まつもと ゆきひろです

In message "Re: [ruby-dev:42692] [Feature: trunk] String#encode(:fallback) should accept default handler"
on Mon, 6 Dec 2010 21:04:18 +0900, SASADA Koichi ko1@atdot.net writes:

| ただ,fallback オプションは Hash のデフォルトハンドラを見てくれないよ
|うです.
|
|h = Hash.new{'?'}
|h["\u00a9"] = '(c)'
|p "\u00A9\u00AA".encode('sjis', fallback: h)
|t.rb:3:in encode': U+00AA from UTF-8 to Shift_JIS
|(Encoding::UndefinedConversionError)
| from t.rb:3:in
'
|
|
| マップを知っているものは特定の文字(列)に,知らないものはテキトーに
|"?" とかにしたい,という用途はあるんじゃないかと思うので,対応して貰える
|といいんじゃないかと思うんですが,どうでしょうか.
|
|
| Proc とか,#[] を持っているオブジェクト一般に広げてもいいかもしれませ
|んが,その辺はお任せします.

|# すでにパチモンがパッチを持ってるようですが....

この変更に賛成します。

ruby/ruby.h に追加している VALUE rb_obj_is_method(VALUE); に /intern/ をつけ、
テストを追加したら中田さんの持っていたパッチでいいんじゃないかと思います。
いれちゃってくださいませ

--
NARUSE, Yui
naruse@airemix.jp

=end

#3

Updated by ko1 (Koichi Sasada) over 8 years ago

=begin
(2010/12/07 16:43), NARUSE, Yui wrote:

ruby/ruby.h に追加している VALUE rb_obj_is_method(VALUE); に /intern/ をつけ、

 なら,別に ruby/ruby.h に載せる必要はないんじゃないでしょうか.

--
// SASADA Koichi at atdot dot net

=end

#4

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

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

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

=end

#5

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

  • Tracker changed from Feature to Backport
  • Project changed from Ruby master to Backport192
  • Status changed from Closed to Assigned
  • Assignee set to yugui (Yuki Sonoda)

Updated by yugui (Yuki Sonoda) about 8 years ago

  • Status changed from Assigned to Closed

I regard this issue as an enhancement. So I don't merge r30118.

Also available in: Atom PDF