2019年11月12日火曜日

[コマンド] スクリプトの文字エンコーディング一括変換

教本のサンプルスクリプトをダウンロードしたら、文字エンコーディングがShift-JISで、デフォルトのエンコーディングと違っていて微妙に使いづらい。同じようなトラブルに出会うことが年数回あって、その都度適当に解決していた。今日はエンコーディングを変換するnkfというコマンドを使えるようにした。

nkfコマンド:
https://www.atmarkit.co.jp/ait/articles/1609/29/news016.html

macOS環境でbrewでインストールを行う。

> brew install nkf

インストール終了後、バージョンを確認する。

> nkf --version



Network Kanji Filter Version 2.1.5 (2018-12-15) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2018, The nkf Project.


ヘルプを出力して確認する。

> nkf --help


Usage:  nkf -[flags] [--] [in file] .. [out file for -O flag]
 j/s/e/w  Specify output encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF options is -w[8[0],{16,32}[{B,L}[0]]]
 J/S/E/W  Specify input encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF option is -W[8,[16,32][B,L]]
 m[BQSN0] MIME decode [B:base64,Q:quoted,S:strict,N:nonstrict,0:no decode]
 M[BQ]    MIME encode [B:base64 Q:quoted]
 f/F      Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl
 Z[0-4]   Default/0: Convert JISX0208 Alphabet to ASCII
          1: Kankaku to one space  2: to two spaces  3: HTML Entity
          4: JISX0208 Katakana to JISX0201 Katakana
 X,x      Convert Halfwidth Katakana to Fullwidth or preserve it
 O        Output to File (DEFAULT 'nkf.out')
 L[uwm]   Line mode u:LF w:CRLF m:CR (DEFAULT noconversion)
 --ic=<encoding>        Specify the input encoding
 --oc=<encoding>        Specify the output encoding
 --hiragana --katakana  Hiragana/Katakana Conversion
 --katakana-hiragana    Converts each other
 --{cap, url}-input     Convert hex after ':' or '%'
 --numchar-input        Convert Unicode Character Reference
 --fb-{skip, html, xml, perl, java, subchar}
                        Specify unassigned character's replacement
 --in-place[=SUF]       Overwrite original files
 --overwrite[=SUF]      Preserve timestamp of original files
 -g --guess             Guess the input code
 -v --version           Print the version
 --help/-V              Print this help / configuration
Network Kanji Filter Version 2.1.5 (2018-12-15) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2018, The nkf Project.


該当するファイルのエンコーディングを確認する。

> nkf --guess Desktop/samples/R1-1.R


Shift_JIS (CRLF)


Shift_JISだった。これをutf8に変換することにした。

nkf -w8 --overwrite Desktop/sample/* 


再度確認してみると、変換されているようだった。

> nkf --guess Desktop/sample/R1-1.R
UTF-8 (BOM) (CRLF)

(追記 2019.11.21)
改行コードの変換にはLオプションを用いる。
L[uwm]   Line mode u:LF w:CRLF m:CR (DEFAULT noconversion)

LF -> CRLFの場合、
> nkf -Lw file.txt > file.crlf.txt 
上書きの場合は
> nkf -Lw --overwrite file.txt
 Shift-JIS & CRLF 変換 
> nkf -Lw -s file.txt > file.out.txt