[#32910] NKF,Kconv — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#32913] openの"b"とencoding — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#32922] SEGV by regexp match in while loop — Tanaka Akira <akr@...>
Debian GNU/Linux (sarge) の gcc-3.4 を使ってビルドした ruby
[#32935] queue and timeout — Tanaka Akira <akr@...>
timeout で Queue#pop に時間制限をつけた時、タイムアウト時に
まつもと ゆきひろです
[#32940] ripper cannot build on win32 — yukimi_sake <yukimi_sake@...>
雪見酒です。
[#32945] Shift_JIS variants and UTF-16 support — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
中村さん、こんにちは。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
成瀬です。
こんにちは、なかむら(う)です。
成瀬です。
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#32946] replica と alias の違い(encoding) — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32987] error with open-uri (instance_eval?) — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#32988] Re: [ruby-cvs:22194] Ruby:r14957 (trunk): * encoding.c (rb_enc_init): UTF-{16,32}{BE,LE} are not builtin. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#32992] ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
At 18:13 08/01/09, Yukihiro Matsumoto wrote:
成瀬です。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#32996] binmode and ASCII-8BIT — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#33069] Re: [ruby-cvs:22244] Ruby:r15007 (trunk): * enc/make_encdb.rb: added. search enc/*.c and make encoding database. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
まつもと ゆきひろです
[#33076] Encoding.compatible? and dummy encodings — sheepman <sheepman@...>
こんにちは sheepman です。
成瀬です。
まつもと ゆきひろです
[#33078] NEW REPLICA ENCODINGS AND ENCODING ALIASES — "NARUSE, Yui" <naruse@...>
成瀬です。
[#33101] String#valid_encoding? shoud be strict? — Masayoshi Takahashi <maki@...>
高橋征義です。1.9のエンコーディングとString#valid_encoding?について。
[#33139] Bignum#* might invoke GC parallelly? — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#33156] default script encoding and -K option — sheepman <sheepman@...>
こんばんは sheepman です。
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#33164] default encoding for Marshal.load — "Shugo Maeda" <shugo@...>
前田です。
まつもと ゆきひろです
[#33185] コンパイルの問題 (r15218) — Martin Duerst <duerst@...>
r15128 当たりで (実はもう少し前から) コンパイルできなくなりました。
[#33218] Re: Ruby1.9String バイト列へのインデックス アクセス — "Hisanori Kiryu" <hkiryu@...>
> ちなみに、byte のではなく bytes の方が妥当だと思います。
[#33224] printf "%0x" — Tanaka Akira <akr@...>
printf の %0x に負の整数を与えると、値によって .. がついたり
[#33226] [PATCH] warnings of enc/trans/utf_16_32.c — Nobuyoshi Nakada <nobu@...>
なかだです。
[#33239] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Tanaka Akira <akr@...>
In article <200801210259.m0L2x3CW017171@ci.ruby-lang.org>,
なかだです。
In article <20080121065650.55F60E0662@mail.bc9.jp>,
なかだです。
まつもと ゆきひろです
[#33247] requests to transcode — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#33303] Time#strftimeのエンコーディング — rubikitch@...
るびきちです。
まつもと ゆきひろです
なかだです。
西山和広です。
[#33368] summary of script encoding — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
永井@知能.九工大です.
[#33387] HashからStructを作る — rubikitch@...
るびきちです。
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
[#33399] regexp match /.../n against to UTF-8 string — Tanaka Akira <akr@...>
以下のように、つけてもいない正規表現の n オプションに関して
[#33400] /#{}/e.encoding — Tanaka Akira <akr@...>
以下のように /#{}/e の encoding が US-ASCII になります。
[#33403] wrapped String#gsub — "Park Ji-In" <tisphie@...>
こんにちは、朴 芝印です。
[#33417] コンパイルの問題 — Martin Duerst <duerst@...>
現在 (r15264 で) コンパイル使用とすると、エラーになります:
At 16:28 08/01/27, you wrote:
[#33433] Win32OLE: set encoding to OLE string — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
成瀬です。
助田です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#33452] enc/euc_kr.c (euckr_mbc_enc_len) euc_kr.c is also used by CP942 — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
成瀬です。
[#33461] Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...>
=1B$B?9ED$H?=3D$7$^$9!#=1B(B
なかだです。
森田です。
なかだです。
森田です。
天野竜太郎と申します。
森田です。
天野です。
森田です。
天野です。
森田です。
天野です。
森田です。
天野です。
[#33488] 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
成瀬です。
永井@知能.九工大です.
成瀬です。
永井@知能.九工大です.
成瀬です。
In article <47A00E86.4010701@airemix.com>,
成瀬です。
In article <47A03C9D.2090008@airemix.com>,
In article <87hcgvu1ng.fsf@fsij.org>,
[#33521] nkf の CP932 — Martin Duerst <duerst@...>
成瀬さん、皆さん、こんにちは。
[#33548] block parameter of String#gsub — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
[ruby-dev:33286] Re: requests to transcode
成瀬です。
U.Nakamura wrote:
> | >(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からの変換の失敗時にどうするかとかは悩まし
> いですが。
stateful encoding を処理するは、ISO 2022 についてならば直前の escape
sequence というか、現在の文字集合番号とバイト列があればよいかと。ここで
1 byte をブロックに渡すか、多バイト必要な場合なことを考えて複数バイト渡
すか、いっそのことバイト列すべてと現在の index を渡すかが迷いどころです
かねぇ。
最後のを使って、さらにいろいろ情報を渡した場合、こんな感じでしょうか
"Ruby\e$B$k$S!<9H6L\e(IYK^0\e(B".encode("UTF-8") do |
from, # encoding convert from
to, # encoding convert to
state, # current state integer
bytes, # bytes string converting
idx, # current index
|
if iso_2022_single_byte_charset(state)
"\\x%X" % bytes[idx]
elsif bytes.length >= idx + 1
# 終了
else
# idx を2つ進めさせる処理
"\\x%X" % [bytes[idx] << 8 + bytes[idx+1]]
end
end
情報を減らしてすっきりさせたい場合は
"Ruby\e$B$k$S!<9H6L\e(IYK^0\e(B".encode("UTF-8") do |
state, # current state integer
bytes, # array of unknown byte
|
if iso_2022_single_byte_charset(state)
"\\x%X" % bytes[0]
elsif buf.length == 0
nil
else
"\\x%X\\x%X" % bytes
end
end
# ブロックからの戻り値が
# nil: 次のバイトを読んで bytes に追加し、ブロックを呼び直す
# string: bytes を空にして次のバイトの処理を続行
復旧時に state の操作もしたいとなると、converter オブジェクトを返した方
がいいのかなぁ。
> フラグを使う例だと、変換不能な文字を任意の指定文字に置換する
> ことはできないような気がしますが、例えばスレッドローカルな特
> 殊変数で指定するとかいうことを考えておられますか?
エンコーディングごとにデフォルトの置換文字が決まっているので、通常はそれ
を用いればいいかと。変えたい場合はブロックで。ハッシュなりで渡すという方
法もあるでしょうね。
実際のところ、あまり任意の置換文字を用いたいというニーズは多くはない気は
します。
> | >(3) C API
> | > String#encodeに相当するC APIが欲しいです。
> | > まあ、そのままならfuncallでもいいんですけど、できればもう
> | > ちょっとC寄りの奴が欲しいですね。
> |
> | funcall と C API のところはこちらの勉強不足でちょっと分かりませんが、
> | 具体的に例えばどういう風に C の関数を呼びたいですか。
>
> 変換元Cバイト配列、変換元encoding、変換先encoding、変換失敗時
> 対応方法、というような引数で呼べると嬉しいです。
> 変換失敗時対応方法として、エラー、指定文字に置き換え、のいず
> れかを選べ、エラー時には例外でなく戻り値で示してもらえると嬉
> しいですね。
思うに mbsrtowcs 的な API についての話だと思います。
まず引数が
* 変換元エンコーディング rb_encoding *src_enc
* 変換元 char **src_p
* 変換元の終わり char *src_e
* 変換先エンコーディング rb_encoding *dest_enc
* 変換先 char **dest_p
* 変換先の終わり char *dest_e
* 変換オプション int opt
* 状態 独自の構造体 tcstate_t *state
戻り値は size_t で、
* 0 または正の値: 成功
詳細:
元のバイト列をすべて変換し終えた。
戻り値は変換に成功した文字数。
fallback が skip や replace の場合は常にこれ。
引数の変化:
src_p: src_e と等しい
dest_p: dest_e と同じかそれより前。変換後のバイト列の終わり
state: 初期状態
NOTE:
ここで state は初期状態でなく ascii only かどうかなどを
つっこんでおいてもいいかも。
* -1: 不正なバイト列
詳細:
元のエンコーディングの CES として不正なバイトが存在した。
引数の変化:
src_p: 不正なバイト列の先頭
dest_p: 変換済み+1
state: 不正なバイト列を読む直前の状態
NOTE:
EILSEQ も復旧するんですよね?mbrtowc や iconv はここで諦めますが。
* -1: 不完全なバイト列
詳細:
元のエンコーディングの CES として不完全なバイトが存在した。
ようは尻切れトンボ。
引数の変化:
src_p: 不完全なバイト列の先頭
dest_p: 変換済み+1
state: 不完全なバイト列を読む直前の状態
NOTE:
stateful encoding の場合は、shift sequence の次の文字まで
読んだところで初めて「文字」とする。
* -3: 変換不能な文字
詳細:
元のエンコーディングの CES としては妥当だが、
変換表に載っていない等の理由で変換できない。
引数の変化:
src_p: 変換不能な文字を構成するバイト列の先頭
dest_p: 変換済み+1
state: 変換不能な文字を構成するバイト列を読む直前の状態
NOTE:
どこまでがその「変換不能な文字」なのかが分からない。
state の方で何とかするか。
* -4: 容量オーバー
詳細:
dest_p == dest_e になってしまった
引数の変化:
src_p: 未変換なバイト列の先頭
dest_p: dest_e と等しいかその少し前
state: 最後に変換成功した状態
使い方は
char *src_p = RSTRING_PTR(str);
char *src_e = RSTRING_END(str);
char **src_pp = &src_p;
while (*src_pp != src_e) {
tcstate_t state = 0;
size_t err = 0;
err = transcode_convert(
enc_windows_31j, src_pp, src_e,
enc_utf_8, dest_pp, dest_e,
TRANSCODE_FB_ERROR, &state);
if (err >= 0) break;
switch(err) {
case -1:
*(dest_pp++) = '?';
break;
case -2:
static const *hex_tbl = "0123456789ABCDEF";
*(dest_pp++) = '\\';
*(dest_pp++) = 'x';
*(dest_pp++) = hex_tbl[((*src_pp)>>8)&0xF];
*(dest_pp++) = hex_tbl[((*src_pp) )&0xF];
break;
case -3:
// expand
break;
default:
// reserved
break;
}
src_pp++;
}
勉強不足なせいでこれで十分かわかりませんが、たぶん大体こんな感じでしょうか。
--
NARUSE, Yui <naruse@airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA