2008/12/30(火) [n年前の日記]
#1 [prog] コピーライト文字の入力方法でハマる
あちらから送られてきたJavaソース中にコピーライト文字があって、それが文字化けをしてしまうため、検証用に別途テキストファイルを作成して…というところでハマってしまった。
まず、MS-IME上からの入力方法が判らない。WordやExcelを使った場合は _「(c)」と打ち込んだりすると件の文字になってくれる らしいが…。検索しまくったところ、「コピーライト」「ちょさくけん」「しー」と打ち込むと変換候補に出てくるらしい。あるいは、IMEパッドかの一覧から選ぶとか。
しかし今度は、エディタ上 ―― xyzzy や NTEmacs、サクラエディタ上で件の文字を出せないことに気づく。MS-IMEの変換候補にはリストアップされている・変換確定するまでは表示されているのだけど。Enterを押して確定した瞬間、単なる「c」の文字になってしまう。Webページ上から件の文字を探してきてコピー&ペーストしてみても、単なる「c」になる。うーん。
あちらさんではエディタに秀丸を使ってたことを思い出し、試しに秀丸をインストール・試用してみたり。emacs文化に触れてからというもの、たとえ試用であっても、秀丸はインストールすらしたくなかったんだけどなあ…。さておき、秀丸上では件の文字が入力できてしまった。うぐぐぐ。これは、特定エディタでのみ入力できる特殊な文字を使ってるということなのだろうか。
秀丸上に表示されたソレをコピーして、xyzzy に貼り付けてみたところ、その方法なら挿入することができたように見えた、が、保存すると単なる「c」になってしまう。SJISで保存されたファイルだから、件のUnicode文字は保存はできない、ということだろうけど…。ん? 変だな? するとあちらさんのソースでは何故その文字が残ってるのか。ソースはSJISファイルのはずなのに。
よくよく見てみると、あちらさんの送ってきたソース中のコピーライト文字は全角だが、こちらで秀丸に打ち込んだコピーライト文字は半角。どうやら自分、今まで違う文字を入力しようと試行錯誤していた模様。というか、あちらさんのソース中にあるコピーライト文字は、MS-IME上で「しー」で出した変換候補リストの、どの文字とも違っていて首を捻る。
そこではたと気がついた。コレはiアプリ用の固有文字、Windows上では外字として扱われている文字ではないのか。…当たりだった。外字中のコピーライト文字だった。SJISで 0xF9D6。DoJaエミュレータをインストールした際に一緒に設定される外字フォントのソレが使われていた。だからSJISでファイル保存しても文字が残っていたのか。
まず、MS-IME上からの入力方法が判らない。WordやExcelを使った場合は _「(c)」と打ち込んだりすると件の文字になってくれる らしいが…。検索しまくったところ、「コピーライト」「ちょさくけん」「しー」と打ち込むと変換候補に出てくるらしい。あるいは、IMEパッドかの一覧から選ぶとか。
しかし今度は、エディタ上 ―― xyzzy や NTEmacs、サクラエディタ上で件の文字を出せないことに気づく。MS-IMEの変換候補にはリストアップされている・変換確定するまでは表示されているのだけど。Enterを押して確定した瞬間、単なる「c」の文字になってしまう。Webページ上から件の文字を探してきてコピー&ペーストしてみても、単なる「c」になる。うーん。
あちらさんではエディタに秀丸を使ってたことを思い出し、試しに秀丸をインストール・試用してみたり。emacs文化に触れてからというもの、たとえ試用であっても、秀丸はインストールすらしたくなかったんだけどなあ…。さておき、秀丸上では件の文字が入力できてしまった。うぐぐぐ。これは、特定エディタでのみ入力できる特殊な文字を使ってるということなのだろうか。
秀丸上に表示されたソレをコピーして、xyzzy に貼り付けてみたところ、その方法なら挿入することができたように見えた、が、保存すると単なる「c」になってしまう。SJISで保存されたファイルだから、件のUnicode文字は保存はできない、ということだろうけど…。ん? 変だな? するとあちらさんのソースでは何故その文字が残ってるのか。ソースはSJISファイルのはずなのに。
よくよく見てみると、あちらさんの送ってきたソース中のコピーライト文字は全角だが、こちらで秀丸に打ち込んだコピーライト文字は半角。どうやら自分、今まで違う文字を入力しようと試行錯誤していた模様。というか、あちらさんのソース中にあるコピーライト文字は、MS-IME上で「しー」で出した変換候補リストの、どの文字とも違っていて首を捻る。
そこではたと気がついた。コレはiアプリ用の固有文字、Windows上では外字として扱われている文字ではないのか。…当たりだった。外字中のコピーライト文字だった。SJISで 0xF9D6。DoJaエミュレータをインストールした際に一緒に設定される外字フォントのソレが使われていた。だからSJISでファイル保存しても文字が残っていたのか。
[ ツッコむ ]
#2 [prog] Windowsに移植されたdos2unixはないのだろうか
改行コードをCRLF→LFに変換するツールが欲しいのだけど。検索してみても見つからない。batファイルから呼び出す関係上、パイプでファイル内容を渡してリダイレクトできるものが欲しいのだけど…。
dos2unix.exe で検索して見つかったモノは一応あるのだけど。 _こちらのソレ はオリジナルのファイルを上書きしてしまうし。 _こちらのソレ はDOS用、つまりWin32用のソレではないので、DOS窓のサイズがパカパカと変化・画面クリアされて、何かこう微妙なものが。
Microsoft Windows Services for UNIX (SFU)の中にも dos2unix.exe はあるらしいのだが。自分の環境は Windows XP Home なので利用できない。
dos2unix にこだわらず、Windows用の改行コード変換ツールを検索してみたけど、えてしてGUIで操作させるものが多く。batファイル中に含めてパイプで渡して云々、といった使い方ができるものは見当たらず。
dos2unix.exe で検索して見つかったモノは一応あるのだけど。 _こちらのソレ はオリジナルのファイルを上書きしてしまうし。 _こちらのソレ はDOS用、つまりWin32用のソレではないので、DOS窓のサイズがパカパカと変化・画面クリアされて、何かこう微妙なものが。
Microsoft Windows Services for UNIX (SFU)の中にも dos2unix.exe はあるらしいのだが。自分の環境は Windows XP Home なので利用できない。
dos2unix にこだわらず、Windows用の改行コード変換ツールを検索してみたけど、えてしてGUIで操作させるものが多く。batファイル中に含めてパイプで渡して云々、といった使い方ができるものは見当たらず。
◎ nkfのオプション指定を気をつければ使えるみたい。 :
nkf -xLu じゃなくて、nkf -xSsLu にしたら、文字化けしないで済んだ。入出力するファイルはSJISであると明示的に指定しておけばそのまま通してくれる、ということなのかな。
◎ sedも本当は必要ないっぽい。 :
batファイル中で、
できれば、改行コードの変換まで、Perlのワンライナーでやれたら楽なのだけど。
sed -e "/^[ ]*$/d"と指定して空行を削除してるみたいなのだけど。
perl -p -e "s/^\s*$//"でも空行を削除してくれるように見える。タブ文字を入れなくて済む分、こちらのほうが扱いが楽かもしれない。Active Perl を入れて、既に色々と処理をしているので、新規に sed を導入しなくても済むし。
できれば、改行コードの変換まで、Perlのワンライナーでやれたら楽なのだけど。
[ ツッコむ ]
以上、1 日分です。