2011年11月28日月曜日

「文字エンコード」と「ファイルエンコーディング」


windowsの場合はわからないけど、Linux(debian squeeze)でvim使っているとステータスラインのところに[変換済み]と表示されるファイルがあった。

え、いやいや、このファイルは昨日、

 :set fileencoding=utf-8 

ってvimコマンドを打ったから標準文字コードのutf-8で保存されているはずでは....
という事態に陥った。

手元の本やネットで調べると、「文字エンコード」と「ファイルエンコーディング」は別ものらしい。

文字エンコードとは、Shift_JIS, UTF-8, EUC-JP, iso-○○○というやつ。
自然言語の文字をデータで表すための表現の名前
(若干違うけどニュアンスはあってる..)

後者の「ファイルエンコーディング」とは(少なくともvimで言うと)
ファイルを開く時の文字コード らしい。

関連情報は後で書くとして、とりあえずこの記事を見たあなた、若しくは未来の僕はおそらく以下のいずれかの問題について考えていると思う。

1.ファイルが適切な文字コードで表示されていない。
2.今、vimで開いているファイルの文字コードが何なのか知りたい。

1.の問題の簡単な解決方法
linux環境であれば、多分leafpadで問題のファイルを開けばとりあえず適切に表示される。(ほとんどのファイルはね)

leafpadというシンプルなエディタdebian, vine, ubuntu などなら標準のリポジトリに入っていると思うので

 sudo apt-get install leafpad 

と端末をたたけばインストール可能。vineなら
 su 
と端末で打ってrootになってから

 apt-get install leafpad 

でok


2.の問題の簡単な解決方法
ターミナルで

 nkf -g 対象ファイル名 

と打てばok, 文字コードが表示される。


さて、でもちゃんとした解決法も書いておく。

まず予備知識
日本語環境のうちメジャーな文字コードだけでもいくつかあるのに
世界中で使われている文字コードはたくさん。

vim以外のエディタにおいても言えるけど、ここで問題なのはファイルをどの文字コードで開けばよいのか判定する方法である。

100%大丈夫な判別方法をvimは持っていない。
このため、vimの設定ファイルでは fileencodings という設定項目に可能性の高い文字コードの順に書く。
 もしくは一旦ファイルを開いたあと手動でvimコマンドを叩いて、あなたが正しい文字コードでファイルを再読み込みさせればよい。

vimの設定ファイル(ホームフォルダ内の.vimrc)に以下の設定を追加すると問題解決するかも

 set fileencodings=utf-8, iso-2022-jp, euc-jp, cp932 

この設定について解説すると,
vimが文字コード判別不能のファイルを開いた時は
とりあえず utf-8 で開く。
なんか違うとvimが感じたらiso-2022, euc-jp, cp932の順に試していく。という設定。
*ちなみにcp932とはShift_JISをさします。

.vimrcに設定を書き加えるときの注意点
今回紹介した設定項目は「fileencodings」。
でも「encoding」という設定項目がある。

後者(encoding)とはvim内部で用いる文字エンコード。
たとえばMicrosoftのoffice関係は保存の時にどういう保存のしかたをしようが、
WordやExcelのプログラムはShift_JISで動いている(違ったらごめん)。

UNIXやLinuxはUTF-8, たまにEUC-JPで動いているのがほとんんど。
基本的に最近のUNIXやLinuxでは
 set encoding = utf-8 
で良い。


次にvimコマンドで
1.ファイルエンコードを確認する方法,
2.ファイルエンコードの指定方法,
3.文字コードの変換方法
4.ついてに改行コードの指定方法
書いておく


1.ファイルエンコードを確認する方法,
 :set fenc? 
2.ファイルエンコードの指定方法,
 set fileencodings=指定したい文字コード名 
3.文字コードの変換方法
 :setlocal fenc=変換したい文字コード名 
4.ついてに改行コードの指定方法
 :set fileencodings=unix 





0 件のコメント:

コメントを投稿