かえでBlog

色々なことを徒然と……

vim(vi)で文字コードを扱うについて色々調べてみた

      2013/08/07

Linuxでよくvim(vi)を使っていますが、この文字の文字コードってなんだったっけ?と調べたくなる場合があります。

たいていは秀丸を使って文字コードを調べますが、vimでやりたい場合もあります。

その場合、カーソルを合わせて 【ga】と入力すれば対象文字の16進数、8進数の文字コードを取得することができます。

16進数や8進数で表示された文字コードは【:set enc?】で表示されたエンコードの文字コードになります。

例)

#にカーソルを合わせ、【ga】と打つ
<#>  35,  16進数 23,  8進数 043

エンコードの確認は【:set enc?】、ファイルエンコードの確認は【:set fenc?】で確認できます。

エンコードとファイルエンコードが違う場合、文字化けが発生する場合があるので【:set fenc=文字コード】【:set enc=文字コード】で変更を行えばいいです。

例)

:set fenc=euc-jp
:set enc=shift_jis
他にもutf-8等もあります。

改行コードを違うものにしたい場合は【:set ff= 改行コードの種類】を指定すればいいです。(確認は【set ff?】で確認できます)

例)

:set ff=unix(LF)
:set ff=dos(CR+LF)
:set ff=mac(CR)

既存ファイルを開く場合、上記の場合だけじゃうまくいかない場合があります。

その場合、ファイルを読み直す必要が出てきます。

読み直す場合、【:set 】の変わりに【:e ++】を使えばOKです。但し、【:e ++fenc=】は使えないみたいです。

例)

:e ++enc=euc-jp
:e ++ff=unix


CentOSでは別途インストールする必要がありますが、nkfコマンドで文字コードを変更することができます。

yum install nkf<br />#文字コードを確認
nkf -g test.txt
UTF-8 (LF)といった感じに表示されます
#文字コードの変換
nkf -w --overwrite test.txt
#test.txtがUTF-8に変換されます。






nkfの引数は以下の通りです。

-j : JISコード(ISO-2022-JP)に変換
-e : EUCコードに変換
-s : Shift-JISコードに変換
-w : UTF-8コードに変換(BOM無し)
-Lu : unix改行形式(LF)に変換
-Lw : windows改行形式(CRLF)に変換
-Lm : macintosh改行形式(CR)に変換
-g(--guess) : 自動判別の結果を表示
--overwrite : 引数のファイルに直接上書き

注意として、
nkf -w test.txt > test.txt
とするとtest.txtのデータがなくなるみたいです。
nkf -w test.txt > test2.txt
で別名保存するか
nkf -w --overwrite test.txt
ですることをお勧めします。


余談

秀丸で文字コードを調べる場合は
【その他】→【コマンド一覧】→【その他】→【文字コード表示】で文字コードを表示することができます。

文字コード、改行コードを変更して保存する場合は名前をつけて保存にあります。

文字コードを変更して再表示する場合は【ファイル】→【エンコードの種類】で変更できます。

私は【その他】→【キー割り当て】でF1ボタンに【文字コード表示】を割り当てています。

 - 備忘録 , , , , , , , ,