fileコマンドは、ファイルの音声や画像などの種類や、テキストファイルの場合文字エンコーディングなどを表示してくれるコマンドです。
やりたかったのは、UTF-8以外のファイルを探して、必要ならばUTF-8に変換しようと思ったのですが。
例えば以下の内容のファイル(UTF-8)をfileコマンドで調べると、ERRORとなります。(OS X 10.8.4)
$ cat test.txt
- 外部キー
他のテーブルの主キーとなるキー
外部キーは表の結合に用いる
$ od -c -t x1 test.txt
0000000 - 外 ** ** 部 ** ** キ ** ** ー ** ** \n
2d 20 e5 a4 96 e9 83 a8 e3 82 ad e3 83 bc 0a 20
0000020 他 ** ** の ** ** テ ** ** ー ** ** ブ ** **
20 e4 bb 96 e3 81 ae e3 83 86 e3 83 bc e3 83 96
0000040 ル ** ** の ** ** 主 ** ** キ ** ** ー ** ** と
e3 83 ab e3 81 ae e4 b8 bb e3 82 ad e3 83 bc e3
0000060 ** ** な ** ** る ** ** キ ** ** ー ** ** \n
81 a8 e3 81 aa e3 82 8b e3 82 ad e3 83 bc 0a 20
0000100 外 ** ** 部 ** ** キ ** ** ー ** ** は ** **
20 e5 a4 96 e9 83 a8 e3 82 ad e3 83 bc e3 81 af
0000120 表 ** ** の ** ** 結 ** ** 合 ** ** に ** ** 用
e8 a1 a8 e3 81 ae e7 b5 90 e5 90 88 e3 81 ab e7
0000140 ** ** い ** ** る ** ** \n
94 a8 e3 81 84 e3 82 8b 0a
0000151
$ file test.txt
test.txt: ERROR: line 22: regexec error 17, (illegal byte sequence)
fileコマンドで、regexec関数を呼び出していて、その関数が不正なバイトの並びを見つけたというエラーのようです。test.txtは3行しかありませんので、行番号の22は、コマンドかライブラリのソースコードの行番号でしょう。
以前は、このようなエラーを見たことがなかったのですが、いつから出るようになったのでしょうか。
いろいろ試行錯誤したところ、localeの環境変数(LANGなど)を消すかCにすると正常に表示されるようになりました。
$ echo $LANG
ja_JP.UTF-8
$ LANG=C file test.txt
test.txt: UTF-8 Unicode text
$ unset LANG
$ file test.txt
test.txt: UTF-8 Unicode text
$
あまり、めでたしめでたしではないですが、暫定的には解決できました。
0 件のコメント:
コメントを投稿