かえでBlog

色々なことを徒然と……

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

   

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で保存元ファイルを開き、文字化けが発生している場合は文字化けを直します。

:e ++enc=ms932

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

:e ++ff=dos

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

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

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

:set fileencoding=utf-8

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

:set fileformat=unix

↑改行コード:LFに変換

:set nobomb

↑BOMなしに変換

  • bomb?…BOMの有無確認
  • bomb…BOM付きに変換
  • nobomb…BOMなしに変換

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

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

別ファイルに保存したい場合は:w 【保存先ファイル】

iconvで変換する場合

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

使い方

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

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

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

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

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

 

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

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

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

チルダ問題とか

MACの濁点問題とか

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

 

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

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

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