‘文字エンコーディング’ カテゴリーのアーカイブ
2009 年 5 月 18 日 by hnw — Linux, Mac OS X, UNIX, 文字エンコーディング
lgrepコマンドをご存知でしょうか。日本語対応ページャlvの付属品で、対象ファイルの文字コードを推定して日本語文字列をうまく見つけてくれるという、優れもののgrepです。
古いプロジェクトだと、プログラムはEUCだけど静的ファイルはSJIS、なんてことがあると思います。そんなときに大活躍です。
grepした結果の文字コード変換も勝手にやってくれるので、grep結果をnkfする必要もありません。至れり尽くせりですね。
そんなlgrepコマンドにも弱点があります。grepで言う-r(再帰的にファイルを検索)オプションが無いのです。どこに書いてあるかわからないエラーメッセージを探す、なんてときに-rは必須ですよね。無いなら作ってしまえ、ということで作ってみました。
alias lgrep-r="find . -type d -name .svn -prune -o -type f -print | xargs lgrep"
上記を.bashrcなり.zshrcなりに書けばlgrep-rコマンド(というかエイリアス)の出来上がりです。私は普段の便利さのために.svnディレクトリを無視するようにしてみましたが、環境に合わせて工夫してみてください。
思いつきで作ったんですが、これは便利!最近UTF-8のプロジェクトオンリーの恵まれた人はともかく、そうでない人にはオススメですよ。
2009 年 4 月 21 日 by hnw — workshop, 文字エンコーディング
「文字集合と文字エンコーディング」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。文字集合という単語を知っている必要はないですけど、少なくともUTF-8とShift_JISとでは扱える文字の種類数が違うことだけは伝えたかったので、その意味では目標が達成できたと思っています。
まとめ
- 文字集合とは、扱える文字の集合
- JIS X 0208なら6000文字くらいの日本語の文字
- UCS-2なら60000文字くらいの世界中の主要な文字
- 文字エンコーディングとは、文字の集合をバイト列に直す方式
- Shift_JISはJIS X 0208(など)を1〜2バイトにする
- UTF-8はUCS-2を1〜3バイトにする
- 文字エンコーディング関連のツールを使いこなそう
- nkfやlvを使いこなそう
- 日本語を探すならlgrep
- 最終兵器:hexjaで16進ダンプ
(続きを読む…)
2008 年 9 月 9 日 by hnw — PHP, zsh, 文字エンコーディング
タイトルそのままなんですが、まずは私のターミナルを見てください。

ドクロマークのようなものが表示されています。日頃の行いが悪すぎてターミナルが呪われたようですね!というのは冗談で、unicodeの文字(U+2620)を1文字表示してみたところです。
私の環境はMacOSXとzshですが、zshでは”\xe2″などで任意の1バイトを表現することができます。つまり、IMEから入力できない文字でも、UTF-8表現の3バイトを指定することで任意の文字を表示できます。
unicodeには色々な文字があります。今回はunicode.orgのMiscellaneous Symbolsを見て、U+2620というのが面白い文字だな、ということで見つけてきました。
(続きを読む…)
2008 年 8 月 20 日 by hnw — Linux, UNIX, shell, 文字エンコーディング
プロジェクトに多人数が参加するようになると、なぜかプロジェクトの標準とは異なる文字エンコーディングのファイルがcommitされていることがあります。UTF-8で統一しているはずなのにShift_JISのファイルがある、なんて場合ですね。そこでメンバーの注意力不足を指摘したり、「だから***(自分の使っていないエディタの名前を入れてください)はダメなんだ」とかいう宗教論争に発展させたりというのでは不毛ですよね。簡単に気づく方法があればそれでいいんですよ。
方法は色々あると思いますが、今日はどこのご家庭にも必ずあるnkfを使ってみましょう。最近のnkfには–guessというオプションがあり、文字エンコーディングを推測してくれます。
$ nkf --guess hoge*.txt
hoge1.txt:EUC-JP (LF)
hoge2.txt:UTF-8 (LF)
hoge3.txt:BINARY
これを使えば、変な文字エンコーディングのファイルが隠れていないかどうかすぐにわかります。私はプロジェクトルートディレクトリで以下のようなコマンドを実行しています。
(続きを読む…)