しらいです。 最初からそんな Windows でしか読めないような文字を使わない ようにしておけばいい、というのが本質論だとは思いますが :-) In Message-Id <20020131183944O.stanaka _at_ ya2.so-net.ne.jp> TANAKA Shuichi <stanaka _at_ ya2.so-net.ne.jp>さんwrites: > 田中@愛知県春日井市です > 宮崎 の 「崎」が消えてしまうのでおかしいと思っていたら、こいつが「山」 > +「奇」ではなく、「山」+ 「立」+「可」 (SJIS で FAB1) でこれが原因でおか > しなことになっていました。 それは IBM 拡張漢字なので、JIS X0208 (or JIS C6226) をベー スに定義されている EUC-JP や ISO-2022-JP には対応する文字コ ードが存在しません。 その辺りの歴史的経緯については最近読んだ本に載ってたと思う ので、詳細が知りたければそういう文献をあたって下さい。 「インターネット時代の文字コード」(共立出版) ISBN4-320-12038-8 http://kyoritsu-pub.topica.ne.jp/bit/mojicode.html > どうも nkf ではこの手の文字には関知しないようなのですが、どういう前処理 > をするのが一番いいでしょうか? sjis -> euc のあいだで、「豆腐」にするよ > うなコマンド、もしくは sjis で perl に読み込んでこれらの文字を処理するう > まい方法があれば教えて下さい。どうぞよろしくお願いします。 ShiftJIS の時点で 1bytes 目が 0xf0 以上の文字を全部ゲタ(〓) 化してしまってから nkf にかければいいんじゃないでしょうか? 簡単な filter を Perl なり C なりで組むのは楽だと思います が、既存のツールを組合わせて用いるなら、tr(1) と sed(1) の合 わせ技でしょうか。sed(1) だけだと 0xf0-0xfc の指定が出来ない もので。 cat src \ | tr '\360\361\362\363\364\365\366\367\370\371\372\373\374' '?' | sed 's/?./〓/g' > dest DOS 側で ShiftJIS を扱える sed を使って 0xf040-0xfc4b の文 字を直接 sed の command 文字列に書いた方が楽ですね。0xf040- 0xf9fc の範囲は外字領域なので、一般には 0xfa40-0xfc4b で十分 でしょう。 しらい たかし
Follow-Ups:
- [linux-users:90998] Re: 外字の扱いTakuo Nakamura
- [linux-users:91099] Re: 外字の扱いTANAKA Shuichi
- [linux-users:90986] 外字の扱いTANAKA Shuichi
- Prev by Subject: [linux-users:90991] Re: 安全な通信方法
- Next by Subject: [linux-users:90993] Re: 安全な通信方法
- Previous by thread: [linux-users:90986] 外字の扱い
- Next by thread: [linux-users:90998] Re: 外字の扱い
- Indexes:[Main][Thread]