QA@IT

Iconv.iconv から String.encode への置き換えが出来ないケース

2568 PV

Ruby 2.0.0 から Iconv が無くなるため、以下のような

Iconv.iconv("UTF-8", "UTF-7", str)

というコードを

str.encode("UTF-8", "UTF-7")

に置き換えると、以下のように変換不可能とエラーが発生します。

Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)

このような場合、ruby-core に変換器を作成してもらうしかないのでしょうか。また、UTF-7 から UTF-8 に変換するという処理自体がおかしい場合は UTF-7 と UTF-8 の関係についての情報源を教えてもらえると嬉しいです。

回答

ちょっと調べてみましたが、UTF-7はダミーエンコーディングであると明言されていますね。
ですから、変換できないというのは仕様通りのようです(1.9.3の話ではありますが)。

http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html

また、こちらによればUTF-7を使うケースは僅少とのことです。

http://www.sophia-it.com/content/UTF-7

ですから、状況としては

UTF-7 から UTF-8 に変換するという処理自体がおかしい場合は

じゃないかなと私は思いました。

ただ、Iconvがなくなるということを考えると、「じゃあUTF-7の処理をどうするの?」という方向でruby-coreで相談するといいかもしれませんね。

編集 履歴 (0)
  • 何となく理解が進みました。その変換機能が本当に必要なのかを考え直してみます。 -
  • 同じダミーエンコーディングであっても ISO-2022-JP であれば変換はできるので、ダミーエンコーディングであることが変換できない理由というわけではないような気がします。 -
  • ダミーエンコーディングとかは String としての扱いの話で、変換は別の話ですね。単にニーズがないだろうと思ったので変換テーブルを用意していません。必要ある方がいればつけるんですが。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。