文字コードの変換(nkfを利用して)

2010/11/23未分類import
文字コードの変換はLinuxとWindowsで同一のテキストファイルを編集したりする際に必須となる.
私がずっと前から利用しているのはnkfという非常に古い(どのくらい古いのかも私は知りません)プログラム.
古いというのは,信頼性が高いということでもあるので,気にする必要はない.
Debianでもパッケージ化されているし(最初に入っていたかはわからない).
何かプログラムに組み込んで使うならiconvというやつも良いと思う.

簡単に文字コードとは

文字コードとは,文字とバイト表現の対応関係のこと.
例えばアルファベットの「A」はASCII文字コードでは,16進数の「0x41」*1というバイト表現に置き換えている(正確で詳細な情報はリンク先をどうぞ).
このような文字とバイト表現の対応はOSやプログラムといった環境によって異なる.
基本的に日本語文字コードは,Linux環境ではEUC-JPUTF-8,Windows環境ではShift-JISというものが使われている.
使用している環境と異なる文字コードで記述されたテキストファイルをエディタで開くと,
文字コード変換機能が搭載されていないエディタでは,文字化けを起こす.
環境と異なる文字コードのファイルを扱うことは不都合も多い.
よって何らかの方法で文字コードを変換することが必要となる.
ここで紹介する方法は上述の通りnkfというプログラムを使った方法である.
対応文字コードは,EUC-JP,UTF-8,Shift-JIS,ISO-2022-JPUTF-16である.

*1 : 10進法だと「65」

インストール方法

Linux(Debian)

aptitudeでインストール可能であるので特に問題ない.

Windows

リンク先からプログラムをダウンロードし,適当なフォルダに置く.
そして,環境変数を設定すれば普通に利用可能である(コマンドプロンプト上で.).
使い方はLinuxのものと変わりない.

Shif-JISをEUC-JPに変換

次のようにたたく.
ushi@BigOwl:~$ nkf -eLu --overwrite filename
こうすると,filenemeにEUC-JP(eオプション)で行末がUNIX形式(Luオプション)の文字コードへ変換された結果が上書きされる.
万に一つくらいは失敗するかもしれないが,ファイル数は増えないので扱いは楽である.
なお,nkfは入力ファイルの文字コードを自動検出してくれるので,これ以上のオプションは必要ない.
(Shift-JIS以外に,UTF-8やISO-2022-JPであっても問題ないです.)
自動検出は普通は失敗しないが,可能性はゼロではないらしい.
もし,上書きせずに別のファイルに出力したければ,以下のようにすればいいと思う.
ushi@BigOwl:~$ nkf -eLu inputfilename > outputfilename

EUC-JPをShift-JISに変換

同様に
ushi@BigOwl:~$ nkf -sLw --overwrite filename

UTF-8に変換

同様に
ushi@BigOwl:~$ nkf -w8Lu --overwrite filename
で問題ないはず.
詳しくは,次のmanページをどうぞ.2種類の文字が欠けている可能性がありますが…….
nkf-ja.pdf

flvファイルから音声抽出

2010/11/23未分類import
以下のようにコマンドをたたく.Debian Lennyのマルチメディアパッケージ導入後で動作確認.
ffmpeg -i input.flv  -acodec copy out.mp3
駄目なときは,mp4ファイルと同様の策をとる.
ffmpeg -i input.flv  -acodec libmp3lame -ab 192k out.mp3

mplayerのプレイリスト

2010/11/23未分類import
mplayerでプレイリストを利用するには,-playlistオプションを利用する.
ushi@BigOwl:~/Music$ mplayer -playlist Tekitou-Playlist12.pls
このオプションの後にとる引数がプレイリストのファイル名だが,書式はかなり自由.
findコマンドなどでメディアファイルを列挙したファイルでも問題なく再生できる.

Cのコンパイルについて

2010/11/17未分類import

math.hを使うときのコンパイルオプション.

久しぶりにmath.hの関数を使うことになりコンパイルしたらエラーになりました.実行したのは下記.
#include<stdio.h>
#include<math.h>

int main(int argc, char *argv[])
{
	double tei=2;
	double kata=10;
	double atai;

	atai = pow(tei,kata);
	printf("%f\n",atai);		

return 0;
}
コンパイルをした際はノーオプションでgccを使いました.
ushi@BigOwl:~$ gcc power-test.c
/tmp/ccMaP96f.o: In function `main':
power-test.c:(.text+0x31): undefined reference to `pow'
collect2: ld returned 1 exit status
ushi@BigOwl:~$
それが間違いで,math.hを使うときは-lmオプションをつけるべきだったのでした.mathのライブラリを読めというような意味と思われます.
ushi@BigOwl:~$ gcc power-test.c -lm
ushi@BigOwl:~$
今度はエラーが出ることもなく.盲点かも知れないので,記事にしておきます.

どうやら,bccなどでは多分このオプションは不要です.