[#40528] [Feature #2833] 絵文字エンコーディングの提案 — Kenta Murata <redmine@...>

Feature #2833: 絵文字エンコーディングの提案

32 messages 2010/03/02
[#40530] Re: [Feature #2833] 絵文字エンコーディングの提案 — Yukihiro Matsumoto <matz@...> 2010/03/02

まつもと ゆきひろです

[#40597] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>

きしもとです

17 messages 2010/03/12
[#40598] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — Yukihiro Matsumoto <matz@...> 2010/03/12

まつもと ゆきひろです

[#40601] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — Yusuke ENDOH <mame@...> 2010/03/12

遠藤です。

[#40608] Re: 組込みの重複順列・重複組合せ — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2010/03/13

> 同様に、repeated_permutation/combination のデフォルト引数にも反対

[#40610] Re: 組込みの重複順列・重複組合せ — Yukihiro Matsumoto <matz@...> 2010/03/13

まつもと ゆきひろです

[#40641] [Bug #2965] method `===' called on hidden T_STRING object (NotImplementedError) — Kenta Murata <redmine@...>

Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)

12 messages 2010/03/15

[#40649] [Feature #2968] 数値の正負を返すメソッド — Yui NARUSE <redmine@...>

Feature #2968: 数値の正負を返すメソッド

17 messages 2010/03/15

[#40650] [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Yui NARUSE <redmine@...>

Feature #2969: String#to_f が -h.hhh±pd を解釈できるように

38 messages 2010/03/15
[#40728] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/22

質問ですが、この形式は入力だけでなく、なんらかの方法で出力でも利用でき

[#40732] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/22

成瀬です。

[#40736] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/23

> String#to_f は従来から指数表記を許していたので、

[#40738] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/23

成瀬です。

[#40745] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/24

> to_i がデフォルトで prefix を見ないのは、0377 のような、

[#40747] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/24

成瀬です。

[#40749] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/24

> 先のパッチの対象関数が ruby_strtod である通り、

[#40759] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/25

成瀬です。

[#40762] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/25

> strtod(3) の解釈対象に含まれていない 2 進や 8 進を否定することが、

[#40763] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/25

(2010/03/26 3:05), Tadayoshi Funaba wrote:

[#40764] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/25

> なぜ同じなのでしょう。

[#40782] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/26

(2010/03/26 4:02), Tadayoshi Funaba wrote:

[#40786] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — KOSAKI Motohiro <kosaki.motohiro@...> 2010/03/27

>> strtod(3) を参考にしたり、影響されたりすることは普通にあるとは思います

[#40788] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/27

(2010/03/27 18:19), KOSAKI Motohiro wrote:

[#40695] keiju, please check tickets assigned to you — Yusuke ENDOH <mame@...>

いしつかさん

15 messages 2010/03/18

[#40779] [Feature #3018] UNINITIALIZED_VAR() マクロの導入 — Motohiro KOSAKI <redmine@...>

Feature #3018: UNINITIALIZED_VAR() マクロの導入

12 messages 2010/03/26

[#40805] Improvement of Fiber switching cost with system dependent way — SASADA Koichi <ko1@...>

 ささだです.

10 messages 2010/03/28

[ruby-dev:40533] Re: [Feature #2833] 絵文字エンコーディングの提案

From: Kenta Murata <muraken@...>
Date: 2010-03-02 17:23:06 UTC
List: ruby-dev #40533
むらたです。

On 2010/03/02, at 23:12, Yukihiro Matsumoto wrote:

> |絵文字に対応したエンコーディングを実装しました。
> |これらを 1.9.2 のリリース前に trunk にマージすることを提案します。
> |redmine のチケットにパッチを添付しました。
> |
> |このパッチは以下のエンコーディングを実装しています。
> 
> エンコーディングを追加することに反対しません。

ありがとうございます。

> |そして、これらのエンコーディング間における fallback なしの
> |相互変換を行うための transcoder も実装しています。
> |
> |fallback とは、変換先エンコーディングに対応絵文字が存在しない場合に、
> |たとえば "[稲穂]" のようなテキストへ変換する処理をいいます。
> |実用上 fallback 処理をカスタマイズ可能な機構が必要ではありますが、
> |現在の構成でも Encoding::Converter#primitive_convert を用いて対応可能です。
> 
> このfallbackあり/なしの変換についてもう少し解説していただけ
> ませんか?

現在の実装では、例えば DoCoMo 用エンコーディングのみで定義されている
絵文字を含む文字列を KDDI 用エンコーディングへ変換しようとすると、
KDDI 用エンコーディングで未定義の文字で Encoding::UndefinedConversionError
が発生するようにしています。
これが、fallback なしの変換です。

fallback ありの場合は、例えば DoCoMo だけで定義されている "\u{E6AD}" (ふくろの絵文字)
を KDDI や SoftBank 用のエンコーディングへ変換するときに、
代わりの絵文字で代替させたり "[ふくろ]" のようなテキストで置き換えたりします。

この置換法則は emoji4unicode の成果物である
http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html
この表で定義されているものが一般的なんだと思っています。
これが一般的であるという考えは私の推測なので、
実際のところは携帯アプリケーションの開発経験をお持ちの方々に伺いたいです。

以下のような fallback つきのコンバータを標準で提供しておけば、
個々のニーズについては fallback 変換表を gem で配布してもらうだけ
済むかもしれません。

# lib/encoding/fallbacking_converter.rb
class Encoding
  class FallbackingConverter < Converter
    def initialize(senc, denc, ftab, *opts)
      super(senc, denc, *opts)
      unless ftab.respond_to? :[]
        raise TypeError, "fallback table should have [] method"
      end
      @fallback_table = ftab
    end

    def fallbacking_convert(src)
      senc = self.source_encoding
      dst = ''
      while true
        case self.primitive_convert(src, dst)
        when :invalid_byte_sequence
          raise InvalidByteSequenceError
        when :undefined_conversion
          undef_char = self.primitive_errinfo[3].force_encoding(senc)
          if fallback = @fallback_table[undef_char]
            self.insert_output(fallback)
          else
            raise UndefinedConversionError
          end
        else
          break
        end
      end
      return dst
    end
  end
end

# 使用例としてのテストケース
class TestFallback < Test::Unit::TestCase
  def setup
    @utf8_docomo = utf8_docomo("\u{E6AD}")
    @utf8_fallbacked_kddi = utf8_kddi("[\u{3075}\u{304f}\u{308d}]") # [ふくろ]
    @converter = Encoding::FallbackingConverter.new(
      "UTF8-DoCoMo", "UTF8-KDDI",
      @utf8_docomo => @utf8_fallbacked_kddi
    )
  end

  def test_fallbacking_convert_for_non_emoji
    assert_equal utf8_kddi("\u{3075}"), @converter.fallbacking_convert(utf8_docomo("\u{3075}"))
  end

  def test_fallbacking_convert_for_emoji
    assert_equal @utf8_fallbacked_kddi, @converter.fallbacking_convert(@utf8_docomo)
  end
end

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/


In This Thread