スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
nkfとiconvによる文字コード・改行コード変換
投稿日時 : 2008-02-18 11:34
UTF-8に対応しているnkfとiconvで文字コードや改行コードを変換するメモ。実行はUbuntu7.10で、ロケールは以下のようにja_JP.UTF-8。
$ echo $LANG
ja_JP.UTF-8
 

■インストール

nkfのインストール
$ sudo apt-get install nkf
パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
Reading state information...
以下のパッケージが新たにインストールされます:
nkf
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 8 個。
116kB のアーカイブを取得する必要があります。
展開後に追加で 295kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com gutsy/universe nkf 2.07-1 [116kB]
116kB を 0s で取得しました (770kB/s)
未選択パッケージ nkf を選択しています。
(データベースを読み込んでいます ... 現在 96566 個のファイルとディレクトリがインストールされています。)
(.../archives/nkf_2.07-1_i386.deb から) nkf を展開しています...
nkf (2.07-1) を設定しています ...

iconvの方はCの標準ライブラリlibc6などをインストールすると使えるようになる。
iconvのインストール元パッケージの確認
$ dpkg -S /usr/bin/iconv
libc6: /usr/bin/iconv

■nkfで文字コード判定

「nkf -g」で文字コードの判定ができます。ただ、-gオプションのロングオプション名が「--guess」(推測する)の通り、確実な判定はできないようです。iconvには文字コード判定機能はありません。他に文字コード判定できるコマンドに「kcc -c filename」や「pkf -c filename」がありますが、Unicodeには非対応。
以下はシステム標準の文字コードであるUTF-8で保存したテキストファイルの文字コードを判定。
$ cat > test.utf8
あいうえお
かきくけこ
abcde
fghij
$ nkf -g test.utf8
UTF-8

kccやpkfだとUTF-8のファイルが以下のように正しく判定できない。
kccやpkfでは正しく判定できない
$ kcc -c test.utf8 
test.utf8:      data
$ pkf -c test.utf8 
sjis
kccの方はバイナリファイルなどを判定した時と同じようにdataとなってしまう。pkfはsjisと誤判定している。
 

■nkfで文字コード変換

nkfで文字コードを変換するには以下のオプションを付けて実行。
-jJISコードに変換
-e日本語EUCコードに変換
-sシフトJISコードに変換
-wUnicode(UTF-8)コードに変換

 
$ cat > test.utf8
あいうえお
かきくけこ
abcde
fghij
$ nkf -g test.utf8
UTF-8
$ nkf -j test.utf8 > test.jis
$ nkf -g test.jis
ISO-2022-JP
$ nkf -e test.utf8 > test.euc
$ nkf -g test.euc
EUC-JP
$ nkf -s test.utf8 > test.sjis
$ nkf -g test.sjis
Shift_JIS
$ nkf -w test.euc > test.utf8
$ nkf -g test.utf8
UTF-8
 

■iconvで文字コード変換

iconvでは文字コードの自動判別機能がついていないので、変換元と変換後の文字コードを-f(--from-code)オプションと-t(--to-code)オプションで指定する必要がある。
$ iconv -f UTF-8 -t EUC-JP test.utf8 > test.utf8.euc
利用可能な文字コード名一覧は-lオプションで確認できる。同じ文字コードを指している場合でもOSによって表記が違うので注意が必要らしい。
UNIXの部屋 検索:iconv (*BSD/Linux/Solaris)
iconv で指定する文字コードは OS によってかなり異なる。例えば HP-UX では EUC-JP や euc-jp ではダメで、eucjp としなくてはいけない。

■nkfで改行コード変換

nkfは以下のオプションで改行コードを変換できる。iconvには改行コード変換機能はないのでtrなどで処理するしかない。
-Lu改行コードをUNIX標準のLFにする
-Lw改行コードをWindows標準のCRLFにする
-Lm改行コードをMac標準のCRにする

改行コードの確認はodやhexdumpコマンドに-cオプションをつけて実行する。
$ nkf -Lw test.utf8 > test.utf8.crlf
$ od -c test.utf8.crlf 
0000000 033   $   B   $   "   $   $   $   &   $   (   $   * 033   (   B
0000020  \r  \n 033   $   B   $   +   $   -   $   /   $   1   $   3 033
0000040   (   B  \r  \n   a   b   c   d   e  \r  \n   f   g   h   i   j
0000060  \r  \n
0000062
$ nkf -Lm test.utf8 > test.utf8.cr
$ hexdump -c test.utf8.cr
0000000 033   $   B   $   "   $   $   $   &   $   (   $   * 033   (   B
0000010  \r 033   $   B   $   +   $   -   $   /   $   1   $   3 033   (
0000020   B  \r   a   b   c   d   e  \r   f   g   h   i   j  \r        
000002e
$ nkf -Lu test.utf8 > test.utf8.lf
$ hexdump -c test.utf8.lf
0000000 033   $   B   $   "   $   $   $   &   $   (   $   * 033   (   B
0000010  \n 033   $   B   $   +   $   -   $   /   $   1   $   3 033   (
0000020   B  \n   a   b   c   d   e  \n   f   g   h   i   j  \n        
000002e
\nはCR(キャリッジリターン)、\rはLF(ラインフィード)。主なOSの改行コードは以下。
UNIX系LF
WindowsCR + LF
MacCR


 
[参考]
UTF-8 対応 nkf (nkf_utf8)
UNIXの部屋 検索:nkf (*BSD/Linux/Solaris)
UNIXの部屋 検索:iconv (*BSD/Linux/Solaris)
 
スポンサーサイト
2008-02-18 11:34 | Linux | Comment(1) | Trackback(0)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。