From: "U.Nakamura" Date: 2008-01-21T19:21:21+09:00 Subject: [ruby-dev:33252] Re: requests to transcode こんにちは、なかむら(う)です。 In message "[ruby-dev:33251] Re: requests to transcode" on Jan.21,2008 19:07:40, wrote: | >(1) Windows-31Jサポート | > 確か以前にMartin先生が対応予定とおっしゃっておられたと思 | > います。 | > 別に急かすわけじゃないですが、一応確認ということで。 | | こちらではもう既に一応やったんですが、その時に今の Shift_JIS | と EUC-JP のところにいくつかの疑問がでてきて、これをきちんと | 洗い出して相談しようと思っています。 きっと成瀬さんがいろいろ助けてくれると思います。 # 他力本願ですみません | >(2) 変換できない文字の扱い | > 現状は変換できない文字があると例外が発生しますが、そうい | > う文字を「?」や「〓」などに置き換えて処理を続行したい場面 | > もそれなりにあると思います。 | > [ruby-core:15036]あたりからの話がそうだと思いますが、これ | > はどうなりそうでしょうか? | | そうですね。実装はわりと簡単ですが、API を決めないと行けないです。 | 最終的にブロックもうまく使いたいですが、これはもう少し先だと思います。 | 現在考えているのは例えば File.fnmatch みたいなフラグを使うことです。 | | 例えば | | s.encode('EUC-JP', String::ENCODE_SUBSTITUTE_TARGET_DEFAULT) | とか | s.encode('Shift_JIS', 'UTF-8', String::DROP_BROKEN_BYTES) | とか。勿論もう少し短くてもいいかと思います :-)。 ruby-coreにあったブロックを使う案はスマートだとは思います。 statefulなencodingからの変換の失敗時にどうするかとかは悩まし いですが。 フラグを使う例だと、変換不能な文字を任意の指定文字に置換する ことはできないような気がしますが、例えばスレッドローカルな特 殊変数で指定するとかいうことを考えておられますか? | >(3) C API | > String#encodeに相当するC APIが欲しいです。 | > まあ、そのままならfuncallでもいいんですけど、できればもう | > ちょっとC寄りの奴が欲しいですね。 | | funcall と C API のところはこちらの勉強不足でちょっと分かりませんが、 | 具体的に例えばどういう風に C の関数を呼びたいですか。 変換元Cバイト配列、変換元encoding、変換先encoding、変換失敗時 対応方法、というような引数で呼べると嬉しいです。 変換失敗時対応方法として、エラー、指定文字に置き換え、のいず れかを選べ、エラー時には例外でなく戻り値で示してもらえると嬉 しいですね。 | 時期的には三者ともそう遠くはないかと思いますが、学校は今一番 | 忙しい時期なので余り保証はできないと思います。 試験とか卒論とかでしょうか。 緊急に困っているわけではなくて、課題があるというリストアップ の意味で投げたものですので、どうか本業のほうを優先してくださ い。 お忙しいところ迅速な返信ありがとうございました。 それでは。 -- U.Nakamura