サーバー 開発 linux

【Linux】WindowsのテキストファイルをLinux用に変換する方法

2015年10月26日

WindowsからLinux間でテキストファイルの送信を行うとエンコード等で問題が出てくることがあります。

Windowsで作成したファイルがShift_JISだったり、改行コードがCRLFだったり…。

文字コード:Shift_JIS+改行コード:CRLFから文字コード:UTF-8+改行コード:LFにする方法をまとめてみました。

nkfで変換する場合

文字コード変換としてよく使用されているnkfです。CentOSで入っていない場合yumでインストールできます。

#yum install nkf

使い方

nkf -Lu -x -w80 【変換元ファイル】 > 【保存先ファイル】

-w80はBOMなしUTF-8です。シェルスクリプトではBOMありファイルは正常に読み子もない場合があるのでBOMなしが無難なようです。

-xをつけないと半角カナが全角カナに変換されるようなので注意

BOMありを選ぶならば-w8 でいけるようです。

上書き保存する場合は--overwriteが必要。

nkf -Lu -x -w80 --overwrite【変換元ファイル】

--overwriteを指定せず変換元と保存先を同じにすると中身が空っぽになるので注意。

他にも色々引数の設定ができるみたいなので次回以降にまとめようと思います。

vimで変換する場合

nkfコマンドが入っていない場合、vimで代用することもできます。
vimで保存元ファイルを開き、文字化けが発生している場合は文字化けを直します。

読み込み

まずはvimでファイルを読み込み、「:e」コマンドで文字コードを指定して再表示します。

文字コード:拡張Shift_JISで再読み込み

:e ++enc=ms932

改行コード:CRLFで再読み込み

:e ++ff=dos

改行コードは下記の通りで指定します。

  • dos…Windows形式(CRLF)
  • mac…Mac形式(CR)
  • unix…Unix形式(LF)

変換

文字化け、改行コードを修正したらフォーマットを変更します。

文字コード:UTF-8に変換

:set fileencoding=utf-8

改行コード:LFに変換

:set fileformat=unix

BOMなしに変換

:set nobomb

bomb?…BOMの有無確認

bomb…BOM付きに変換

nobomb…BOMなしに変換

その他

fileencodingをfenc、fileformatをffと略すことも可能みたいです。

別ファイルに保存したい場合は:w 【保存先ファイル】で保存することができます。

vimの場合:wを押すまで設定した文字コードや改行コードが反映されないので注意。

iconvで変換する場合

RedHatにインストールされているiconvでも変換することができます。

使い方

iconv -f SJIS -t UTF8 【変換元ファイル】 -o 【保存先ファイル】

一番シンプル。しかし、シンプルな為に色々できないっぽいです。

改行コードの変換ができない、BOMを付けたり消したりできない。

さらに変換元ファイルがUTF-8の場合BOM有りだとエラーになる等々

もちろん上書きもできません。

変換に失敗する文字列も存在する

全ての文字がきちんと変換できるっていうわけでもないです。

SJISのCSVファイルをEXCELで開き、環境依存文字を入力するとか(そもそも保存時に文字化けするけど)

チルダ問題とか

MACの濁点問題とか

外字なんてきたらどうしようもない(自作スクリプト作るぐらいしか対応なし?)

変換する際は変換前文字がどうなってるのか確認してから変換するのがベストだと思います。

改行コードぐらいなら問題なさそうですけどね。

-サーバー, 開発, linux
-, ,